#include<bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
const int maxn=200000+10;
int n,m;
long long tree[maxn<<2];
void PushUp(int rt)
{
tree[rt]=max(tree[rt<<1],tree[rt<<1|1]);
}
void build(int l,int r,int rt)
{
if(l==r)
{
scanf("%I64d",&tree[rt]);
return ;
}
int m=(l+r)>>1;
build(lson);
build(rson);
PushUp(rt);
}
void update(int p,int x,int l,int r,int rt)
{
if(l==r)
{
tree[rt]=x;
return ;
}
int m=(l+r)>>1;
if(p<=m)
update(p,x,lson);
else
update(p,x,rson);
PushUp(rt);
}
long long query(int L,int R,int l,int r,int rt)
{
if(L<=l && r<=R)
return tree[rt];
int m=(l+r)>>1;
long long ans=-1;
if(L<=m)
ans=max(ans,query(L,R,lson));
if(R>m)
ans=max(ans,query(L,R,rson));
return ans;
}
int main(void)
{
char input[5];
long long a,b;
while(cin>>n>>m)
{
build(1,n,1);
while(m--)
{
scanf("%s%I64d%I64d",input,&a,&b);
if(input[0]=='Q')
printf("%I64d\n",query(a,b,1,n,1));
else
update(a,b,1,n,1);
}
}
return 0;
}
hdu 1754 单点更新
最新推荐文章于 2024-05-16 11:43:34 发布