Advertisement
pb_jiang

cf 555B AC

Sep 22nd, 2022
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.85 KB | None | 0 0
  1. #include <assert.h>
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. #define dbg(...) logger(#__VA_ARGS__, __VA_ARGS__)
  5. template <typename... Args> void logger(string vars, Args &&...values)
  6. {
  7.     cerr << vars << " = ";
  8.     string delim = "";
  9.     (..., (cerr << delim << values, delim = ", "));
  10.     cerr << endl;
  11. }
  12.  
  13. template <class T> using mpq = priority_queue<T, vector<T>, greater<T>>;
  14. using ll = long long;
  15. using pii = pair<int, int>;
  16. using pll = pair<ll, ll>;
  17. using plli = pair<pll, int>;
  18.  
  19. int n, m;
  20. pll rng[200003];
  21. plli srng[200003];
  22. pll arr[200003];
  23. int main(int argc, char **argv)
  24. {
  25.     scanf("%d%d", &n, &m);
  26.     for (int i = 1; i <= n; ++i)
  27.         scanf("%lld%lld", &rng[i].first, &rng[i].second);
  28.     for (int i = 1; i < n; ++i)
  29.         srng[i].first.first = rng[i + 1].first - rng[i].second, srng[i].first.second = rng[i + 1].second - rng[i].first,
  30.         srng[i].second = i;
  31.     sort(srng + 1, srng + n);
  32.     for (int i = 1; i <= m; ++i)
  33.         scanf("%lld", &arr[i].first), arr[i].second = i;
  34.     sort(arr + 1, arr + 1 + m);
  35.  
  36.     int fill_cnt = 0;
  37.     vector<int> ans(n);
  38.     mpq<pll> rem;
  39.     for (int i = 1, j = 1; i <= m; ++i) {
  40.         while (j < n && srng[j].first.first <= arr[i].first) {
  41.             rem.push({srng[j].first.second, srng[j].second});
  42.             ++j;
  43.         }
  44.         if (rem.empty())
  45.             continue;
  46.         auto h = rem.top();
  47.         rem.pop();
  48.         if (h.first < arr[i].first) {
  49.             // dbg(arr[i].first, arr[i].second);
  50.             // dbg(i, j, "break", h.first, h.second, rem.size());
  51.             break;
  52.         }
  53.         ans[h.second] = arr[i].second;
  54.         ++fill_cnt;
  55.     }
  56.     if (fill_cnt == n - 1) {
  57.         printf("Yes\n");
  58.         for (int i = 1; i < n; ++i)
  59.             printf("%d ", ans[i]);
  60.         printf("\n");
  61.     } else {
  62.         printf("No\n");
  63.     }
  64. }
  65.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement