Advertisement
yeskendir_sultanov

SQRT Decomposotion

Apr 7th, 2025
324
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.68 KB | Source Code | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int n, k;
  5. vector<int> a, b, add;
  6.  
  7. void update(int l, int r, int x) {
  8.     int bl = l / k, br = r / k;
  9.     if (bl != br) {
  10.         for (int i = l; i < (bl + 1) * k; i++) {
  11.             a[i] += x;
  12.             b[bl] += x;
  13.         }
  14.         for (int i = br * k; i <= r; ++i) {
  15.             a[i] += x;
  16.             b[br] += x;
  17.         }
  18.         for (int i = bl + 1; i < br; ++i) {
  19.             b[i] += k * x;
  20.             add[i] += x;
  21.         }
  22.     } else {
  23.         for (int i = l; i <= r; ++i) {
  24.             a[i] += x;
  25.             b[i / k] += x;
  26.         }
  27.     }
  28. }
  29.  
  30. int sum(int l, int r) {
  31.     int bl = l / k, br = r / k;
  32.    
  33.     int res = 0;
  34.    
  35.     if (bl != br) {
  36.         for (int i = l; i < (bl + 1) * k; ++i) {
  37.             res += a[i] + add[i / k];
  38.         }
  39.         for (int i = br * k; i <= r; ++i) {
  40.             res += a[i] + add[i / k];
  41.         }
  42.         for (int i = bl + 1; i < br; ++i) {
  43.             res += b[i];
  44.         }
  45.     } else {
  46.         for (int i = l; i <= r; ++i) {
  47.             res += a[i] + add[i / k];
  48.         }    
  49.     }
  50.    
  51.     return res;
  52. }
  53.  
  54. int main() {
  55.     cin >> n;
  56.     a.resize(n);
  57.     k = int(sqrt(n) + 0.99);
  58.     b.resize(k + 1, 0);
  59.     add.resize(k + 1, 0);
  60.    
  61.     for (int i = 0; i < n; ++i) {
  62.         cin >> a[i];
  63.         b[i / k] += a[i];
  64.     }
  65.    
  66.    
  67.     int q;
  68.     cin >> q;
  69.    
  70.     while (q--) {
  71.         int op, l, r;
  72.         cin >> op >> l >> r;
  73.         l--; r--;
  74.         if (op == 1) {
  75.             int x;
  76.             cin >> x;
  77.             update(l, r, x);
  78.         } else {
  79.             cout << sum(l, r) << endl;
  80.         }
  81.     }
  82.    
  83.     return 0;
  84. }
  85.  
  86.  
  87.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement