标签:return ace oid int 测试 tchar 树状 har cst
给一个长为N的数列,有M次操作,每次操作是以下两种之一:
(1)修改数列中的一个数
(2)求数列中某连续一段的和
5 3 1 2 3 4 5 Q 1 5 M 2 7 Q 1 5
15 20
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 const int MAXN=100001; 6 int a[MAXN]; 7 int tree[MAXN]; 8 int n,m; 9 void read(int &n) 10 { 11 char c=‘+‘;int x=0;bool flag=0; 12 while(c<‘0‘||c>‘9‘){c=getchar();if(c==‘-‘)flag=1;} 13 while(c>=‘0‘&&c<=‘9‘) 14 x=(x<<1)+(x<<3)+c-48,c=getchar(); 15 flag==1?n=-x:n=x; 16 } 17 int lb(int p) 18 { 19 return (p)&(-p); 20 } 21 void add(int pos,int v) 22 { 23 int p=pos; 24 while(p<=n) 25 { 26 tree[p]+=v; 27 p+=lb(p); 28 } 29 } 30 int sum(int pos) 31 { 32 int ans=0; 33 int p=pos; 34 while(p) 35 { 36 ans+=tree[p]; 37 p-=lb(p); 38 } 39 return ans; 40 } 41 int main() 42 { 43 read(n);read(m); 44 for(int i=1;i<=n;i++) 45 { 46 int p; 47 read(p); 48 a[i]=p; 49 add(i,p); 50 } 51 for(int i=1;i<=m;i++) 52 { 53 char c;int x,y; 54 cin>>c;read(x);read(y); 55 if(c==‘Q‘) 56 printf("%d\n",sum(y)-sum(x-1)); 57 else 58 { 59 add(x,y-a[x]); 60 a[x]=y; 61 } 62 63 } 64 return 0; 65 }
标签:return ace oid int 测试 tchar 树状 har cst
原文地址:http://www.cnblogs.com/zwfymqz/p/7207907.html