#include <stdio.h> #include <string.h> #include <math.h> #include <stdlib.h> #include <iostream> #include <algorithm> #define lson idx<<1 #define rson idx<<1|1 #define maxn 200005 using namespace std; int stu[maxn]; struct set_Tree { int l,r,Max; }tr[maxn*3]; void build(int L,int R,int idx) { if(L==R) { tr[idx].Max=stu[L]; return ;} int mid=(tr[idx].l+tr[idx].r)/2; build(L,mid,lson); build(mid+1,R,rson); tr[idx].Max=max(tr[lson].Max,tr[rson].Max); } void update(int p,int date,int idx) { if(tr[idx].l==tr[idx].r) { tr[idx].Max=date; return ; } int mid=(tr[idx].l+tr[idx].r)/2; if(p<=mid) update(p,date,lson); else update(p,date,rson); tr[idx].Max=max(tr[lson].Max,tr[rson].Max); } int query(int L,int R,int idx) { if(L<=tr[idx].l && tr[idx].r<=R) return tr[idx].Max; int mid=(tr[idx].l+tr[idx].r)/2; int res=0; if(L<=mid) res=max(res,query(L,R,lson)); if(R>mid) res=max(res,query(L,R,rson)); return res; } int main() { int i,j,a,b,n,m; char str; freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); while(scanf("%d %d",&n,&m)==2) { for(i=1;i<=n;i++) scanf("%d",&stu[i]); for(i=1;i<=n;i++) printf("%d ",stu[i]); build(1,n,1); getchar(); for(i=1;i<=m;i++) { scanf("%c %d %d\n",&str,&a,&b); printf("%c %d %d\n",str,a,b); if(str=='Q') printf("%d\n",query(a,b,1)); else update(a,b,1); } } return 1; }