hdu1754 线段树点修改

 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

posted on 2014-07-16 17:34  xiao_xin  阅读(87)  评论(0编辑  收藏  举报

导航