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