1 条题解

  • 0
    @ 2023-11-7 19:24:12
    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 2e5 + 5;
    int lazy[maxn<<2], a[maxn], n, q;
    
    #define lson l, mid, rt<<1
    #define rson mid+1, r, rt<<1|1
    void push_down(int rt) {
    	if (lazy[rt]) {
    		lazy[rt<<1] += lazy[rt];
    		lazy[rt<<1|1] += lazy[rt];
    		lazy[rt] = 0;
    	}
    }
    void update(int L, int R, int x, int l, int r, int rt) {
    	if (L <= l && r <= R) {
    		lazy[rt] += x;
    		return;
    	}
    	push_down(rt);
    	int mid = (l + r) / 2;
    	if (L <= mid) update(L, R, x, lson);
    	if (R > mid) update(L, R, x, rson);
    }
    int query(int p, int l, int r, int rt) {
    	if (l == r)
    		return lazy[rt] + a[p];
    	push_down(rt);
    	int mid = (l + r) / 2;
    	return (p <= mid) ? query(p, lson) : query(p, rson);
    }
    
    int main() {
    	scanf("%d", &n);
    	for (int i = 1; i <= n; i++)
    		scanf("%d", a+i);
    	scanf("%d", &q);
    	while (q--) {
    		int op;
    		scanf("%d", &op);
    		if (op == 1) {
    			int l, r, x;
    			scanf("%d%d%d", &l, &r, &x);
    			update(l, r, x, 1, n, 1);
    		}
    		else {
    			int p;
    			scanf("%d", &p);
    			printf("%d\n", query(p, 1, n, 1));
    		}
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    27
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    2
    已通过
    2
    上传者