Guest User

a.cpp

a guest
Nov 8th, 2025
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.92 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. #define pii pair<int,int>
  4. #define pb push_back
  5. #define IOS ios_base::sync_with_stdio(NULL);cin.tie(0);cout.tie(0);
  6. #define f first
  7. #define s second
  8. #define mp make_pair
  9. #define ll long long
  10.  
  11. using namespace std;
  12. const int MAXN=1e5+10;
  13. const ll INF=1e18 + 7;
  14. const int MOD=1e9+7;
  15.  
  16. int t[MAXN * 4], a[MAXN], add[4 * MAXN];
  17.  
  18. int n;
  19. void build(int v, int tl, int tr){
  20.     if (tl > tr){
  21.         return;
  22.     }
  23.     if (tl == tr){
  24.         t[v] = a[tl];
  25.         return;
  26.     }
  27.     int tm = (tl + tr) >> 1;
  28.     build((v << 1), tl, tm);
  29.     build((v << 1) | 1, tm + 1, tr);
  30.     t[v] = t[(v << 1)] + t[((v << 1) | 1)];
  31. }
  32.  
  33. void push(int v, int tl, int tr){
  34.     if (add[v] != 0){
  35.         int tm = (tl + tr) >> 1;
  36.         t[(v << 1)] += (tm - tl + 1) * add[v];
  37.         t[(v << 1) | 1] += (tr - tm) * add[v];
  38.         add[(v << 1)] += add[v];
  39.         add[(v << 1) | 1] += add[v];
  40.         add[v] = 0;
  41.     }
  42. }
  43.  
  44. int sum(int v, int tl, int tr, int l, int r){
  45.     if (l > r){
  46.         return 0;
  47.     }
  48.     if (tl == l && tr == r){
  49.         return t[v];
  50.     }
  51.     push(v, tl, tr);
  52.     int tm = (tl + tr) >> 1;
  53.     return sum((v << 1), tl, tm, l, min(r, tm))
  54.         + sum(((v << 1) | 1), tm + 1, tr, max(l, tm + 1), r);
  55. }
  56.  
  57. void update(int v, int tl, int tr, int pos, int val){
  58.     if (tl > tr){
  59.         return;
  60.     }
  61.     if (tl == tr){
  62.         t[v] = val;
  63.         return;
  64.     }
  65.  
  66.     push(v, tl, tr);
  67.     int tm = (tl + tr) >> 1;
  68.     if (pos <= tm){
  69.         update((v << 1), tl, tm, pos, val);
  70.     }
  71.     else{
  72.         update(((v << 1) | 1), tm + 1, tr, pos, val);
  73.     }
  74.     t[v] = t[(v << 1)] + t[((v << 1) | 1)];
  75. }
  76.  
  77. void update2(int v, int tl, int tr, int l, int r, int val){
  78.     if (l > r)
  79.         return;
  80.     if (l == tl && r == tr){
  81.         t[v] += (tr - tl + 1) * val;
  82.         add[v] += val;
  83.         return;
  84.     }
  85.     push(v, tl, tr);
  86.     int tm = (tl + tr) >> 1;
  87.     update2((v << 1), tl, tm, l, min(r, tm), val);
  88.     update2((v << 1) | 1, tm + 1, tr, max(l, tm + 1), r, val);
  89.  
  90.     t[v] = t[(v << 1)] + t[(v << 1) | 1];
  91. }
  92.  
  93. void solve(){
  94.     cin >> n;
  95.     for (int i = 1; i <= n; i++){
  96.         cin >> a[i];
  97.     }
  98.     build(1, 1, n);
  99.     int q;
  100.     cin >> q;
  101.     for (int i = 1; i <= q; i++){
  102.         int type;
  103.         cin >> type;
  104.         if (type == 1){
  105.             int l, r;
  106.             cin >> l >> r;
  107.             cout << sum(1, 1, n, l, r) << '\n';
  108.         }
  109.         else if (type == 2){
  110.             int pos, val;
  111.             cin >> pos >> val;
  112.             update(1, 1, n, pos, val);
  113.         }
  114.         else if (type == 3){
  115.             int l, r, val;
  116.             cin >> l >> r >> val;
  117.             update2(1, 1, n, l, r, val);
  118.         }
  119.     }
  120.  
  121.  
  122. }
  123.  
  124. int main(){
  125.     freopen("sum.in", "r", stdin);
  126.     freopen("sum.out", "w", stdout);
  127.     //IOS;
  128.     int ttt = 1;
  129.     //cin >> ttt;
  130.     while (ttt--){
  131.         solve();
  132.     }
  133. }
  134.  
  135.  
  136. //Vertex
  137. //Academy203!
  138.  
  139.  
Advertisement
Add Comment
Please, Sign In to add comment