Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <assert.h>
- #include <bits/stdc++.h>
- using namespace std;
- #define dbg(...) logger(#__VA_ARGS__, __VA_ARGS__)
- template <typename... Args> void logger(string vars, Args &&...values)
- {
- cerr << vars << " = ";
- string delim = "";
- (..., (cerr << delim << values, delim = ", "));
- cerr << endl;
- }
- template <class T> using mpq = priority_queue<T, vector<T>, greater<T>>;
- using ll = long long;
- using pii = pair<int, int>;
- using pll = pair<ll, ll>;
- using plli = pair<pll, int>;
- int n, m;
- pll rng[200003];
- plli srng[200003];
- pll arr[200003];
- int main(int argc, char **argv)
- {
- scanf("%d%d", &n, &m);
- for (int i = 1; i <= n; ++i)
- scanf("%lld%lld", &rng[i].first, &rng[i].second);
- for (int i = 1; i < n; ++i)
- srng[i].first.first = rng[i + 1].first - rng[i].second, srng[i].first.second = rng[i + 1].second - rng[i].first,
- srng[i].second = i;
- sort(srng + 1, srng + n);
- for (int i = 1; i <= m; ++i)
- scanf("%lld", &arr[i].first), arr[i].second = i;
- sort(arr + 1, arr + 1 + m);
- int fill_cnt = 0;
- vector<int> ans(n);
- mpq<pll> rem;
- for (int i = 1, j = 1; i <= m; ++i) {
- while (j < n && srng[j].first.first <= arr[i].first) {
- rem.push({srng[j].first.second, srng[j].second});
- ++j;
- }
- if (rem.empty())
- continue;
- auto h = rem.top();
- rem.pop();
- if (h.first < arr[i].first) {
- // dbg(arr[i].first, arr[i].second);
- // dbg(i, j, "break", h.first, h.second, rem.size());
- break;
- }
- ans[h.second] = arr[i].second;
- ++fill_cnt;
- }
- if (fill_cnt == n - 1) {
- printf("Yes\n");
- for (int i = 1; i < n; ++i)
- printf("%d ", ans[i]);
- printf("\n");
- } else {
- printf("No\n");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement