Boss239

Untitled

Sep 16th, 2025
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.30 KB | Source Code | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. struct Fenwick {
  5.     int n = 0;
  6.     vector<int> t;
  7.     Fenwick() {}
  8.     Fenwick(int n_) { init(n_); }
  9.     void init(int n_) { n = n_; t.assign(n + 1, 0); }
  10.     void add(int idx, int delta) {
  11.         for (int i = idx + 1; i <= n; i += i & -i) t[i] += delta;
  12.     }
  13.     int sumPrefix(int idx) const {
  14.         int res = 0;
  15.         for (int i = idx + 1; i > 0; i -= i & -i) res += t[i];
  16.         return res;
  17.     }
  18. };
  19.  
  20. struct Op {
  21.     bool isGet;
  22.     int a, b, x, y, k, l;
  23. };
  24.  
  25. int main() {
  26.     ios::sync_with_stdio(false);
  27.     cin.tie(nullptr);
  28.    
  29.     int N, M;
  30.     if (!(cin >> N >> M)) return 0;
  31.     vector<int> A(N + 1);
  32.     for (int i = 1; i <= N; ++i) cin >> A[i];
  33.  
  34.     vector<Op> ops;
  35.     ops.reserve(M);
  36.     vector<pair<int,int>> allPairs;
  37.     allPairs.reserve(N + M);
  38.     for (int i = 1; i <= N; ++i) allPairs.emplace_back(i, A[i]);
  39.  
  40.     for (int i = 0; i < M; ++i) {
  41.         string s; cin >> s;
  42.         if (s == "SET") {
  43.             int a, b; cin >> a >> b;
  44.             ops.push_back({false, a, b, 0, 0, 0, 0});
  45.             allPairs.emplace_back(a, b);
  46.         } else {
  47.             int x, y, k, l; cin >> x >> y >> k >> l;
  48.             ops.push_back({true, 0, 0, x, y, k, l});
  49.         }
  50.     }
  51.     vector<vector<int>> nodes(N + 1);
  52.     for (auto [pos, val] : allPairs) {
  53.         for (int i = val; i <= N; i += i & -i) nodes[i].push_back(pos);
  54.     }
  55.     for (int i = 1; i <= N; ++i) {
  56.         auto &v = nodes[i];
  57.         sort(v.begin(), v.end());
  58.         v.erase(unique(v.begin(), v.end()), v.end());
  59.     }
  60.     vector<Fenwick> bits(N + 1);
  61.     for (int i = 1; i <= N; ++i) bits[i].init((int)nodes[i].size());
  62.  
  63.     vector<int> cur = A;
  64.  
  65.     auto addPoint = [&](int pos, int val, int delta) {
  66.         for (int i = val; i <= N; i += i & -i) {
  67.             auto &v = nodes[i];
  68.             int idx = int(lower_bound(v.begin(), v.end(), pos) - v.begin());
  69.             bits[i].add(idx, delta);
  70.         }
  71.     };
  72.  
  73.     for (int pos = 1; pos <= N; ++pos) addPoint(pos, cur[pos], +1);
  74.  
  75.     auto countLE_posLE = [&](int vmax, int posLimit) -> long long {
  76.         if (vmax <= 0 || posLimit <= 0) return 0;
  77.         long long res = 0;
  78.         for (int i = vmax; i > 0; i -= i & -i) {
  79.             const auto &v = nodes[i];
  80.             if (v.empty()) continue;
  81.             int idx = int(upper_bound(v.begin(), v.end(), posLimit) - v.begin()) - 1;
  82.             if (idx >= 0) res += bits[i].sumPrefix(idx);
  83.         }
  84.         return res;
  85.     };
  86.  
  87.     auto rectQuery = [&](int x, int y, int k, int l) -> long long {
  88.         if (x > y || k > l) return 0;
  89.         long long Ayy = countLE_posLE(l, y);
  90.         long long Ayx = countLE_posLE(l, x - 1);
  91.         long long B yy = countLE_posLE(k - 1, y);
  92.         long long B yx = countLE_posLE(k - 1, x - 1);
  93.         return (Ayy - Ayx) - (B yy - B yx);
  94.     };
  95.     ostringstream out;
  96.     for (const auto &q : ops) {
  97.         if (!q.isGet) {
  98.             int pos = q.a, val = q.b;
  99.             if (cur[pos] != val) {
  100.                 addPoint(pos, cur[pos], -1);
  101.                 addPoint(pos, val, +1);
  102.                 cur[pos] = val;
  103.             }
  104.         } else {
  105.             long long ans = rectQuery(q.x, q.y, q.k, q.l);
  106.             out << ans << '\n';
  107.         }
  108.     }
  109.     cout << out.str();
  110.     return 0;
  111. }
  112.  
Advertisement
Add Comment
Please, Sign In to add comment