#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
int n,m;
char c[10];
const int maxn=200005;
int node[maxn<<2];
void pushup(int nd)
{
node[nd]=max(node[nd<<1],node[nd<<1|1]);
}
void build(int l,int r,int nd)
{
if(l==r)
{scanf("%d",&node[nd]);
return;}
int mid=(l+r)>>1;
build(l,mid,nd<<1);
build(mid+1,r,nd<<1|1);
pushup(nd);
}
void update(int pos,int val,int l,int r,int
nd)
{
if(l==r)
{
node[nd]=val;
return;
}
int mid=(l+r)>>1;
if(mid<pos)update(pos,val,mid+1,r,nd<<1|1);
else update(pos,val,l,mid,nd<<1);
pushup(nd);
}
int query(int s,int e,int l,int r,int nd)
{
if(s<=l&&e>=r)
{
return node[nd];
}
int maxi=0;
int mid=(l+r)>>1;
if(s<=mid)maxi=max(maxi,query(s,e,l,mid,nd<<1));
if(e>mid)maxi=max(maxi,query(s,e,mid+1,r,nd<<1|1));
return maxi;
}
int main()
{
while(cin>>n>>m)
{build(1,n,1);
while(m--)
{scanf("%s",c);
int pos,val;
cin>>pos>>val;
if(c[0]=='Q')
{
int ans=query(pos,val,1,n,1);
cout<<ans<<endl;
}
if(c[0]=='U')update(pos,val,1,n,1);
}
}
}
1.数据范围(这里不需要ffi)
2.warn 要把build放外面