********************************************************************************
属于模板题了,一个单点修改区间询问,一个区间修改单点询问
/*单点修改的*/ #include<cstdio> #include<algorithm> #define maxn 500001 using namespace std; int tree[maxn]; int lowbit(int x) { return x&-x; } int n,m; void add(int w,int x) { while(w<=n) { tree[w]+=x; w+=lowbit(w); } } int modify(int x) { int ans=0; while(x>0) { ans+=tree[x]; x-=lowbit(x); } return ans; } int read() { int now=0; int f=1; char c=getchar(); while(c>'9'||c<'0') { if(c=='-')f=-1; c=getchar(); } while(c>='0'&&c<='9') { now*=10; now+=c-'0'; c=getchar(); } return now*f; } int main() { n=read(); m=read(); for(int i=1;i<=n;i++) { add(i,read()); } for(int i=1;i<=m;i++) { int pan=read(); int op=read(); int od=read(); if(pan==1) { add(op,od); } else { printf("%d ",modify(od)-modify(op-1)); } } return 0; }
*****************************************************************
/*区间修改的*/ #include<cstdio> #define maxn 500001 using namespace std; int n,m; int tree[maxn]; int note=0; int read() { int now=0; int f=1; char c=getchar(); while(c>'9'||c<'0') { if(c=='-')f=-1; c=getchar(); } while(c>='0'&&c<='9') { now*=10; now+=c-'0'; c=getchar(); } return now*f; } int lowbit(int x) { return x&-x; } void add(int wei,int x) { while(wei<=n) { tree[wei]+=x; wei+=lowbit(wei); } } int query(int x) { int ans=0; while(x>0) { ans+=tree[x]; x-=lowbit(x); } return ans; } int main() { n=read(); m=read(); int a,b,c; for(int i=1;i<=n;i++) { int aa=read(); add(i,aa-note); note=aa; } for(int i=1;i<=m;i++) { if(read()==1) { a=read(),b=read(),c=read(),add(a,c),add(b+1,-c); } else printf("%d ",query(read())); } return 0; }