Advertisement
YEZAELP

o20_oct_landval

Jan 12th, 2022
674
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. const int N = 2e5;
  5. int tree[1 << 19], lazy[1 << 19];
  6. bool upd[1 << 19];
  7.  
  8. void Push(int idx, int l, int r, int val){
  9.     if(l != r){
  10.         lazy[2 * idx] += val, upd[2 * idx] = true;
  11.         lazy[2 * idx + 1] += val, upd[2 * idx + 1] = true;
  12.     }
  13.     lazy[idx] = 0;
  14.     tree[idx] += val;
  15.     upd[idx] = false;
  16. }
  17.  
  18. void Update(int idx, int l, int r, int s, int e, int val){
  19.     if(upd[idx]) Push(idx, l, r, lazy[idx]);
  20.     if(r < s or e < l) return;
  21.     if(s <= l and r <= e){
  22.         Push(idx, l, r, val);
  23.         return;
  24.     }
  25.     int mid = (l + r) / 2;
  26.     Update(2 * idx, l, mid, s, e, val);
  27.     Update(2 * idx + 1, mid + 1, r, s, e, val);
  28. }
  29.  
  30. int Query(int idx, int l, int r, int pst){
  31.     if(upd[idx]) Push(idx, l, r, lazy[idx]);
  32.     if(l == r) return tree[idx];
  33.     int mid = (l + r) / 2;
  34.     if(pst <= mid) return Query(2 * idx, l, mid, pst);
  35.     else return Query(2 * idx + 1, mid + 1, r, pst);
  36. }
  37.  
  38. int main(){
  39.  
  40.     int n, m;
  41.     scanf("%d %d", &n, &m);
  42.  
  43.     for(int i=1;i<=m;i++){
  44.         int opr;
  45.         scanf("%d", &opr);
  46.         if(opr == 1){ /// update
  47.             int s, e, val;
  48.             scanf("%d %d %d", &s, &e, &val);
  49.             Update(1, 1, n, s, e, val);
  50.         }
  51.         else if(opr == 2){ /// query
  52.             int pst;
  53.             scanf("%d", &pst);
  54.             printf("%d\n", Query(1, 1, n, pst));
  55.         }
  56.     }
  57.  
  58.     return 0;
  59. }
Advertisement
RAW Paste Data Copied
Advertisement