rt,求dalao救命
#include<bits/stdc++.h>
#define lson(root) (root << 1)
#define rson(root) (root << 1 | 1)
using namespace std;
int n , t;
int a[200010] , mx[800010];
void pushup(int root)
{
mx[root] = max(mx[lson(root)] , mx[rson(root)]);
}
void update(int root , int l , int r , int x , int y)
{
if(l == r)
{
mx[root] = max(mx[root] , y);
return;
}
int mid = (l + r) >> 1;
if(x <= mid)
update(lson(root) , l , mid , x , y);
else
update(rson(root) , mid + 1 , r , x , y);
pushup(root);
}
int query(int root , int l , int r , int L , int R)
{
int mid = (l + r) >> 1;
if(L <= l && R >= r)
return mx[root];
int ans = -2147483648;
if(L <= mid)
ans = max(ans , query(lson(root) , l , mid , L , R));
if(R > mid)
ans = max(ans , query(rson(root) , mid + 1 , r , L , R));
return ans;
}
void build(int root , int l , int r)
{
int mid = (l + r) >> 1;
if(l == r)
{
mx[root] = a[l];
return;
}
build(lson(root) , l , mid);
build(rson(root) , mid + 1 , r);
pushup(root);
}
int main()
{
scanf("%d%d" , &n , &t);
for(int i = 1 ; i <= n ; i ++)
scanf("%d" , &a[i]);
build(1 , 1 , n);
while(t --)
{
char op;
int x , y;
cin >> op;
scanf("%d%d" , &x , &y);
if(op == 'U')
update(1 , 1 , n , x , y);
else
printf("%d\n" , query(1 , 1 , n , x , y));
}
return 0;
}