题号:3374
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 | #include<string> #include<cstring> #include<algorithm> #include<cstdlib> #include<iostream> using namespace std; struct treearray{ const static int MAX=500005; int C[MAX]; treearray(){ memset(C,0,sizeof(C)); } int lowbit(int i){ return i&(-i); } void update(int i,int n){ while(i<=MAX){ C[i]+=n; i+=lowbit(i); } } int sum(int k){ int sum=0; while(k>0){ sum+=C[k]; k-=lowbit(k); } return sum; } }ta; int main(){ ios::sync_with_stdio(false); int n,m; cin>>n>>m; for(int i=1;i<=n;i++){ int t; cin>>t; ta.update(i,t); } for(int i=1;i<=m;i++){ int p1,p2,p3; cin>>p1>>p2>>p3; switch(p1){ case 1: ta.update(p2,p3); break; case 2: cout<<(ta.sum(p3)-ta.sum(p2-1))<<endl; break; } } } |