第一次写,仅以此记;
ACcode:
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<algorithm>
#include<string.h>
#define fr(ii,n) for(int ii=0;ii<n;ii++)
using namespace std;
const int size=220000;
int n,m,k;
int maxs[size<<2];
char str[5];
void build(int l,int r,int rt)
{
if (l==r)
{
scanf("%d",&maxs[rt]);
return ;
}
int mid=(l+r)>>1;
build(l,mid,rt<<1);
build(mid+1,r,rt<<1|1);
maxs[rt]=max(maxs[rt<<1],maxs[rt<<1|1]);
}
void update(int a,int b,int l,int r,int rt)
{
if (l==r)
{
maxs[rt]=b;
return ;
}
int mid=(l+r)>>1;
if (a<=mid) update(a,b,l,mid,rt<<1);
else update(a,b,mid+1,r,rt<<1|1);
maxs[rt]=max(maxs[rt<<1],maxs[rt<<1|1]);
}
int query(int a,int b,int l,int r,int rt)
{
if (a<=l&&b>=r)
{
return maxs[rt];
}
int mid=(l+r)>>1,r1=0,r2=0;
if (a<=mid) r1=query(a,b,l,mid,rt<<1);
if (b>mid) r2=query(a,b,mid+1,r,rt<<1|1);
return max(r1,r2);
}
int main()
{
int a,b;
while (~scanf("%d %d",&n,&m))
{
build(1,n,1);
fr (i,m)
{
scanf("%s%d%d",str,&a,&b);
if (str[0]=='U') update(a,b,1,n,1);
else printf("%d\n",query(a,b,1,n,1));
}
}
return 0;
}