标签:
Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 52514 Accepted Submission(s): 20640
1 #include<stdio.h> 2 #include<string.h> 3 #define lson root<<1,l,mid 4 #define rson root<<1|1,mid+1,r 5 const int MAXN=200010<<2; 6 #define X int root,int l,int r 7 #define Y 1,1,N 8 #define MAX(x,y)(x>y?x:y) 9 #define NOW tree[root]=MAX(tree[root<<1],tree[root<<1|1]) 10 int tree[MAXN]; 11 int A,B,anser; 12 void build(X){ 13 if(l==r)scanf("%d",&tree[root]); 14 else { 15 int mid=(l+r)>>1; 16 build(lson); 17 build(rson); 18 NOW; 19 } 20 } 21 void update(X){ 22 if(l==A&&r==A)tree[root]=B; 23 else{ 24 int mid=(l+r)>>1; 25 if(A<=mid)update(lson); 26 else update(rson); 27 NOW; 28 } 29 } 30 void print(X){ 31 if(A<=l&&B>=r)anser=MAX(anser,tree[root]);//这个是从线段树的顶往下搜的 32 else{ 33 int mid=(l+r)>>1; 34 if(A<=mid)print(lson);//记住mid 35 if(B>mid)print(rson); 36 NOW; 37 } 38 } 39 int main(){ 40 int N,M; 41 char s[2]; 42 while(~scanf("%d%d",&N,&M)){ 43 build(Y); 44 while(M--){ 45 scanf("%s",s); 46 if(!strcmp(s,"U")){ 47 scanf("%d%d",&A,&B); 48 update(Y); 49 } 50 else{ 51 anser=0; 52 scanf("%d%d",&A,&B); 53 print(Y); 54 printf("%d\n",anser); 55 } 56 } 57 } 58 return 0; 59 }
标签:
原文地址:http://www.cnblogs.com/handsomecui/p/4799057.html