首页 > 其他 > 详细

HDU 1754

时间:2014-07-31 12:23:06      阅读:320      评论:0      收藏:0      [点我收藏+]

第一题线段树,纪念一下

 1 #include <cstdio>
 2 #include <iostream>
 3 using namespace std;
 4 int  tree[800005];
 5 void build(int l,int r,int root){
 6     if(l==r){
 7         scanf("%d",&tree[root]);
 8     }
 9     else {
10         int mid=(l+r)/2;
11         build(l,mid,root*2);
12         build(mid+1,r,root*2+1);
13         tree[root]=max(tree[root*2],tree[root*2+1]);
14     }
15 }
16 void updata(int x,int y,int l,int r,int root){
17     if(l==r){
18         tree[root]=y;
19     }
20     else {
21         int mid=(l+r)/2;
22         if(x<=mid)updata(x,y,l,mid,root*2);
23         else updata(x,y,mid+1,r,root*2+1);
24         tree[root]=max(tree[root*2],tree[root*2+1]);
25     }
26 }
27 int query(int x,int y,int l,int r,int root){
28     if(x<=l&&y>=r){
29         return tree[root];
30     }
31     else {
32         int sum=0,mid=(l+r)/2;
33         if(x<=mid)sum=max(sum,query(x,y,l,mid,root*2));
34         if(y>mid)sum=max(sum,query(x,y,mid+1,r,root*2+1));
35         return sum;
36     }
37 }
38 int main(){
39 
40     int n,m,x,y;
41     char s[5];
42     while(scanf("%d%d",&n,&m)!=EOF){
43         build(1,n,1);
44         for(int i=0;i<m;i++){
45             scanf("%s%d%d",s,&x,&y);
46             if(s[0]==U)updata(x,y,1,n,1);
47             else printf("%d\n",query(x,y,1,n,1));
48         }
49     }
50     return 0;
51 }

 

HDU 1754,布布扣,bubuko.com

HDU 1754

原文:http://www.cnblogs.com/Mr-Xu-JH/p/3880057.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!