蒟蒻只有50pt
代码巨丑,勿喷
#include<bits/stdc++.h>
#define int long long
using namespace std;
int arr[200010];
struct node{
int l, r, data;
};
node tree[200010<<2+100000];
void build(int l,int r,int index){
if(l == r) {
tree[index].data = arr[l];
tree[index].l = tree[index].r = l;
return;
}
int mid = l + r >> 1;
build(l,mid,index*2);
build(mid+1,r,index*2+1);
tree[index].l = l;
tree[index].r = r;
tree[index].data = max(tree[index*2].data, tree[index*2+1].data);
}
void q(int a, int b, int index) {
if(tree[index].l > a || tree[index].r < a) {
return;
}
if(tree[index].l == a && tree[index].l == tree[index].r) {
tree[index].data = b;
return;
}
q(a,b,index*2);
q(a,b,index*2+1);
tree[index].data = max(tree[index*2].data, tree[index*2+1].data);
}
int ask(int a, int b, int index) {
if(b >= tree[index].r && a<=tree[index].l) {
return tree[index].data;
}
if(b < tree[index].l || a > tree[index].r) {
return 0;
}
return max(ask(a,b,index*2), ask(a,b,index*2+1));
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
int n, m;
cin >> n >> m;
for(int i=1; i<=n; ++i) {
cin >> arr[i];
}
build(1,n,1);
for(int i=1; i<=m; ++i) {
char bl;
cin >> bl;
int a, b;
cin >> a >> b;
if(bl == 'Q') {
cout << ask(a,b,1) << endl;
}
else
{
q(a,b,1);
}
}
return 0;
}