Advertisement
pb_jiang

ABC380E

Nov 17th, 2024
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.66 KB | None | 0 0
  1. #include <assert.h>
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. #ifndef __DEBUG__
  5. #define dbg(...) 42
  6. #endif
  7. template <class T>
  8. using mpq = priority_queue<T, vector<T>, greater<T>>;
  9.  
  10. using ll = long long;
  11. using pii = pair<int, int>;
  12. using pll = pair<ll, ll>;
  13. using vl = vector<ll>;
  14. using vi = vector<int>;
  15.  
  16. int main(int argc, char **argv) {
  17.     ll n, q;
  18.     cin >> n >> q;
  19.     vl cnt(n + 1, 1);
  20.     using a2l = array<ll, 2>;
  21.     map<a2l, ll> cs;
  22.     for (ll i = 0; i <= n + 1; ++i)
  23.         cs[{i, i + 1}] = i;
  24.  
  25.     for (ll i = 0, op, x, c; i < q; ++i) {
  26.         cin >> op;
  27.         switch (op) {
  28.             case 1: {
  29.                 cin >> x >> c;
  30.                 auto it = std::prev(cs.upper_bound({x, LLONG_MAX}));
  31.                 auto [lb, ub] = it->first;
  32.  
  33.                 ll old_color = it->second, old_cnt = ub - lb;
  34.                 cnt[old_color] -= old_cnt, cnt[c] += old_cnt;
  35.  
  36.                 auto pre = std::prev(it), nxt = std::next(it);
  37.                 dbg(x, lb, ub, old_color, c);
  38.  
  39.                 if (nxt->second == c) {
  40.                     assert(ub == (nxt->first)[0]);
  41.                     ub = (nxt->first)[1];
  42.                     cs.erase(nxt);
  43.                 }
  44.                 cs.erase(it);
  45.                 if (pre->second == c) {
  46.                     assert(lb == (pre->first)[1]);
  47.                     lb = (pre->first)[0];
  48.                     cs.erase(pre);
  49.                 }
  50.                 cs.insert({{lb, ub}, c});
  51.                 break;
  52.             }
  53.             case 2: {
  54.                 cin >> c;
  55.                 cout << cnt[c] << '\n';
  56.                 break;
  57.             }
  58.         }
  59.     }
  60.     return 0;
  61. }
  62.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement