标签:
等线段树复习完再做个总结
1
10
1 2 3 4 5 6 7 8 9 10
Query 1 3
Add 3 6
Query 2 7
Sub 10 2
Add 6 3
Query 3 10
End
Case 1:
6
33
59
1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<queue> 7 using namespace std; 8 int n,m,t; 9 #define lson l,m,rt<<1 10 #define rson m+1,r,rt<<1|1 11 const int maxn=55555; 12 int sum[maxn<<2]; 13 void pushup(int rt){ 14 sum[rt]=sum[rt<<1]+sum[rt<<1|1]; 15 } 16 void build(int l,int r,int rt){ 17 if(l==r){ 18 scanf("%d",&sum[rt]); 19 return ; 20 } 21 int m=(l+r)>>1; 22 build(lson); 23 build(rson); 24 pushup(rt); 25 } 26 void update(int p,int add,int l,int r,int rt){ 27 if(l==r){ 28 sum[rt]+=add; 29 return ; 30 } 31 int m=(l+r)>>1; 32 if (p<=m) update(p,add,lson); 33 else update(p,add,rson); 34 pushup(rt); 35 } 36 int query(int L,int R,int l,int r,int rt) { 37 if (L<=l&&r<=R){ 38 return sum[rt]; 39 } 40 int m=(l+r)>>1; 41 int ret=0; 42 if(L<=m) ret+=query(L,R,lson); 43 if(R>m) ret+=query(L,R ,rson); 44 return ret; 45 } 46 int main() 47 { 48 int i,j,k; 49 //freopen("1.in","r",stdin); 50 scanf("%d",&t); 51 for(i=1;i<=t;i++) 52 { 53 printf("Case %d:\n",i); 54 scanf("%d",&n); 55 build(1,n,1); 56 char s[100]; 57 int p,v; 58 while(scanf("%s",s)!=EOF) 59 { 60 if(s[0]==‘E‘) break; 61 scanf("%d%d",&p,&v); 62 if(s[0]==‘A‘) update(p,v,1,n,1); 63 else if(s[0]==‘S‘) update(p,-v,1,n,1); 64 else if(s[0]==‘Q‘) printf("%d\n",query(p,v,1,n,1)); 65 } 66 } 67 return 0; 68 }
/*
1
10
1 2 3 4 5 6 7 8 9 10
Query 1 3
Add 3 6
Query 2 7
Sub 10 2
Add 6 3
Query 3 10
End
Case 1:
6
33
59
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
int n,m,t;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
const int maxn=55555;
int sum[maxn<<2];
void pushup(int rt){
sum[rt]=sum[rt<<1]+sum[rt<<1|1];
}
void build(int l,int r,int rt){
if(l==r){
scanf("%d",&sum[rt]);
return ;
}
int m=(l+r)>>1;
build(lson);
build(rson);
pushup(rt);
}
void update(int p,int add,int l,int r,int rt){
if(l==r){
sum[rt]+=add;
return ;
}
int m=(l+r)>>1;
if (p<=m) update(p,add,lson);
else update(p,add,rson);
pushup(rt);
}
int query(int L,int R,int l,int r,int rt) {
if (L<=l&&r<=R){
return sum[rt];
}
int m=(l+r)>>1;
int ret=0;
if(L<=m) ret+=query(L,R,lson);
if(R>m) ret+=query(L,R ,rson);
return ret;
}
int main()
{
int i,j,k;
freopen("1.in","r",stdin);
scanf("%d",&t);
for(i=1;i<=t;i++)
{
printf("Case %d:\n",i);
scanf("%d",&n);
build(1,n,1);
char s[100];
int p,v;
while(scanf("%s",s)!=EOF)
{
if(s[0]==‘E‘) break;
scanf("%d%d",&p,&v);
if(s[0]==‘A‘) update(p,v,1,n,1);
else if(s[0]==‘S‘) update(p,-v,1,n,1);
else if(s[0]==‘Q‘) printf("%d\n",query(p,v,1,n,1));
}
}
return 0;
}
标签:
原文地址:http://www.cnblogs.com/cnblogs321114287/p/4280938.html