#include<cstdio>
#include<cstring>
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define MAX(x,y) ((x)>(y)?(x):(y))
#define MIN(x,y) ((x)>(y)?(y):(x))
#define INF 0x3f3f3f3f
using namespace std;
int t[200000<<2],d[200000<<2];
void build(int l,int r,int rt)
{
if(l==r)
{
t[rt]=d[l];
return ;
}
int m=(l+r)>>1;
build(lson);
build(rson);
t[rt]=MAX(t[rt<<1],t[rt<<1|1]);
}
void update(int i,int v,int l,int r,int rt)
{
if(i<l||i>r)
return ;
if(l==r)
{
t[rt]=v;
return ;
}
int m=(l+r)>>1;
update(i,v,lson);
update(i,v,rson);
t[rt]=MAX(t[rt<<1],t[rt<<1|1]);
return ;
}
int query(int a,int b,int l,int r,int rt)
{
if(b<l||a>r)
return 0;
if(a<=l&&r<=b)
return t[rt];
int m=(l+r)>>1;
int res1=query(a,b,lson);
int res2=query(a,b,rson);
return MAX(res1,res2);
}
int main()
{
int n,m;
char str[10];
while(~scanf("%d%d",&n,&m))
{
for(int i=1;i<=n;i++)
scanf("%d",&d[i]);
build(1,n,1);
while(m--)
{
int a,b;
scanf("%s%d%d",str,&a,&b);
if(str[0]=='Q')
printf("%d\n",query(a,b,1,n,1));
else
update(a,b,1,n,1);
}
}
}
hdu 1754
最新推荐文章于 2019-10-25 00:39:07 发布