首页 > 代码库 > HDU 1754
HDU 1754
第一题线段树,纪念一下
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 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。