1 #include <stdio.h> 2 int ql,qr,p,v,minv[1000005]; 3 int max(int x,int y) 4 { 5 if (x>y) return(x); 6 return(y); 7 } 8 int query(int o,int l,int r) 9 { 10 int m=l+(r-l)/2,ans=-10000000; 11 if (ql<=l&&r<=qr) return(minv[o]); 12 if (ql<=m) ans=max(ans,query(o*2,l,m)); 13 if (m<qr) ans=max(ans,query(o*2+1,m+1,r)); 14 return(ans); 15 } 16 void update(int o,int l,int r) 17 { 18 int m=l+(r-l)/2; 19 if (l==r) minv[o]=v; 20 else 21 { 22 if (p<=m) update(o*2,l,m); 23 else update(o*2+1,m+1,r); 24 minv[o]=max(minv[o*2],minv[o*2+1]); 25 } 26 } 27 int main() 28 { 29 int i,n,k; 30 char ch; 31 while (~scanf("%d%d",&n,&k)) 32 { 33 for (i=1;i<=2*n;i++) minv[i]=-1000000; 34 for (p=1;p<=n;p++) 35 { 36 scanf("%d",&v); 37 update(1,1,n); 38 } 39 for (i=1;i<=k;i++) 40 { 41 getchar(); 42 scanf("%c%d%d",&ch,&p,&v); 43 ql=p; qr=v; 44 if (ch=='U') update(1,1,n); 45 else printf("%d\n",query(1,1,n)); 46 } 47 } 48 return(0); 49 }
http://acm.hdu.edu.cn/showproblem.php?pid=1754