#include<iostream>
#include<algorithm>
#include<string>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int MAX[4000001];
int max(int a,int b)
{
return a>b?a:b;
}
void PushUp(int rt)
{
MAX[rt]=max(MAX[rt<<1],MAX[(rt<<1)+1]);
}
void build(int l,int r,int rt)
{
if(l==r)
{
scanf("%d",&MAX[rt]);
return;
}
int m=(l+r)>>1;
build(l,m,rt<<1);
build(m+1,r,(rt<<1)+1);
PushUp(rt);
}
void update(int p,int q,int l,int r,int rt)
{
if(l==r)
{
MAX[rt]=q;
return;
}
int m=(l+r)>>1;
if(p<=m)
update(p,q,l,m,rt<<1);
else
update(p,q,m+1,r,(rt<<1)+1);
PushUp(rt);
}
int getmax(int L,int R,int l,int r,int rt)
{
if(L<=l&&r<=R)
return MAX[rt];
int m=(r+l)>>1;
int ret=0;
if(L<=m)
ret=max(ret,getmax(L,R,l,m,rt<<1));
if(R>m)
ret=max(ret,getmax(L,R,m+1,r,(rt<<1)+1));
return ret;
}
int main()
{
int n,m,a,b,i;
char c;
while(~scanf("%d %d",&n,&m))
{
build(1,n,1);
for(i=0;i<m;i++)
{
scanf("%*c%c%d %d",&c,&a,&b);
if(c=='Q')
printf("%d\n",getmax(a,b,1,n,1));
else
update(a,b,1,n,1);
}
}
return 0;
}
tjut 1754
最新推荐文章于 2016-08-31 17:14:15 发布