Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 2e5;
- int tree[1 << 19], lazy[1 << 19];
- bool upd[1 << 19];
- void Push(int idx, int l, int r, int val){
- if(l != r){
- lazy[2 * idx] += val, upd[2 * idx] = true;
- lazy[2 * idx + 1] += val, upd[2 * idx + 1] = true;
- }
- lazy[idx] = 0;
- tree[idx] += val;
- upd[idx] = false;
- }
- void Update(int idx, int l, int r, int s, int e, int val){
- if(upd[idx]) Push(idx, l, r, lazy[idx]);
- if(r < s or e < l) return;
- if(s <= l and r <= e){
- Push(idx, l, r, val);
- return;
- }
- int mid = (l + r) / 2;
- Update(2 * idx, l, mid, s, e, val);
- Update(2 * idx + 1, mid + 1, r, s, e, val);
- }
- int Query(int idx, int l, int r, int pst){
- if(upd[idx]) Push(idx, l, r, lazy[idx]);
- if(l == r) return tree[idx];
- int mid = (l + r) / 2;
- if(pst <= mid) return Query(2 * idx, l, mid, pst);
- else return Query(2 * idx + 1, mid + 1, r, pst);
- }
- int main(){
- int n, m;
- scanf("%d %d", &n, &m);
- for(int i=1;i<=m;i++){
- int opr;
- scanf("%d", &opr);
- if(opr == 1){ /// update
- int s, e, val;
- scanf("%d %d %d", &s, &e, &val);
- Update(1, 1, n, s, e, val);
- }
- else if(opr == 2){ /// query
- int pst;
- scanf("%d", &pst);
- printf("%d\n", Query(1, 1, n, pst));
- }
- }
- return 0;
- }
Advertisement
RAW Paste Data
Copied
Advertisement