1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| #include<bits/stdc++.h> using namespace std; long long tree[500005]; int nx; int lowbit(int x) { return x&(-x); } void add(int x,long long d) { for(;x<=nx;x+=lowbit(x)) tree[x]+=d; } void range_add(int xa,int xb,long long d) { add(xa,d); add(xb+1,-d); } long long ask(int x) { long long s; for(s=0;x;x-=lowbit(x)) s+=tree[x]; return s; } long long range_ask(int xa,int xb) { long long s=0; s+=ask(xb); s-=ask(xa-1); return s; } int q; int main() { scanf("%d%d",&nx,&q); for(int i=1,x;i<=nx;i++) { scanf("%d",&x); range_add(i,i,x); } for(int i=1,opt,x,xa,xb;i<=q;i++) { scanf("%d",&opt); if(opt==1) { long long k; scanf("%d%d%lld",&xa,&xb,&k); range_add(xa,xb,k); } if(opt==2) { scanf("%d",&x); printf("%lld\n",ask(x)); } } }
|