ProgMe

Untitled

Nov 26th, 2023
708
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.98 KB | None | 0 0
  1. #include <bits/extc++.h>
  2. #define int int64_t
  3.  
  4. using namespace std;
  5. using namespace __gnu_pbds;
  6.  
  7. const int N = 2e5 + 1;
  8. const int C = 1;
  9.  
  10. array<int, N> a, sum, push;
  11.  
  12. void update(int i, int x) {
  13.     sum[i / C] -= a[i];
  14.     a[i] += x;
  15.     sum[i / C] += a[i];
  16. }
  17.  
  18. void update(int l, int r, int x) {
  19.     int bl = l / C;
  20.     int br = r / C;
  21.  
  22.     if (bl == br) {
  23.         for (int i = l; i <= r; ++i) {
  24.             update(i, x);
  25.         }
  26.         return;
  27.     }
  28.  
  29.     for (int i = bl + 1; i < br; i++) {
  30.         sum[i] += C * x;
  31.         push[i] += x;
  32.     }
  33.     for (int i = l; i < (bl + 1) * C; i++) {
  34.         update(i, x);
  35.     }
  36.     for (int i = br * C; i <= r; i++) {
  37.         update(i, x);
  38.     }
  39. }
  40.  
  41. void build(int n) {
  42.     for (int i = 0; i < n; i++) {
  43.         sum[i / C] += a[i];
  44.     }
  45. }
  46.  
  47. int get(int l, int r) {
  48.     int bl = l / C;
  49.     int br = r / C;
  50.  
  51.     if (bl == br) {
  52.         int ans = 0;
  53.         for (int i = l; i <= r; ++i) {
  54.             ans += a[i];
  55.         }
  56.         return ans;
  57.     }
  58.  
  59.     int ans = 0;
  60.     for (int i = bl + 1; i < br; i++) {
  61.         ans += sum[i];
  62.     }
  63.     for (int i = l; i < (bl + 1) * C; i++) {
  64.         ans += a[i] + push[bl];
  65.     }
  66.     for (int i = br * C; i <= r; i++) {
  67.         ans += a[i] + push[br];
  68.     }
  69.  
  70.     return ans;
  71. }
  72.  
  73. int32_t main(){
  74.     ios::sync_with_stdio(false);
  75.     cin.tie(nullptr);
  76.  
  77.     int n;
  78.     cin >> n;
  79.     int q;
  80.     cin >> q;
  81.  
  82.     for (int i = 0; i < n; i++) {
  83.         cin >> a[i];
  84.     }
  85.     build(n);
  86.  
  87.     while (q--) {
  88.         int tp;
  89.         cin >> tp;
  90.         if (tp == 3) {
  91.             int i, x;
  92.             cin >> i >> x;
  93.             i--;
  94.  
  95.             update(i, x);
  96.         } else if (tp == 2) {
  97.             int l, r, x;
  98.             cin >> l >> r >> x;
  99.             l--, r--;
  100.  
  101.             update(l, r, x);
  102.         } else if (tp == 1) {
  103.             int l, r;
  104.             cin >> l >> r;
  105.             l--, r--;
  106.  
  107.             cout << get(l, r) << '\n';
  108.         }
  109.     }
  110. }
  111.  
Advertisement
Add Comment
Please, Sign In to add comment