HDU1754(线段树)
程序员文章站
2024-03-20 09:19:58
...
#include<stdio.h>
int T[600006];
void build(int l,int r,int i) {
if(l==r) {
scanf("%d",&T[i]);
return;
}
int mid=(l+r)/2;
build(l,mid,i*2);
build(mid+1,r,i*2+1);
T[i]=max(T[i*2],T[i*2+1]);
}
void alter(int x,int y,int i,int l,int r){
if(l==r){
T[i]=y;
return ;
}
int mid=(l+r)/2;
if(x>mid)
alter(x,y,i*2+1,mid+1,r);
else
alter(x,y,i*2,l,mid);
T[i]=max(T[i*2],T[i*2+1]);
}
int search(int x,int y,int i,int l,int r){
if(l==x&&y==r)
return T[i];
int mid=(l+r)/2;
if(x>mid)
return search(x,y,i*2+1,mid+1,r);
if(y<=mid)
return search(x,y,i*2,l,mid);
return max(search(mid+1,y,i*2+1,mid+1,r),search(x,mid,i*2,l,mid));
}
int main() {
int n,m;
while(scanf("%d %d",&n,&m)!=EOF){
build(1,n,1);
for(int i=0;i<m;i++){
char c[10];
int x,y;
scanf("%s %d %d",c,&x,&y);
if(c[0]=='Q')
printf("%d\n",search(x,y,1,1,n));
else
alter(x,y,1,1,n);
}
}
return 0;
}
上一篇: DOM基础
下一篇: HTML DOM 操作