#include <iostream>
#include <algorithm>
#define N 500010
using namespace std;
struct tr {
int l, r, max;
}t[N*4];
int a[N];
void js(int n, int l, int r)
{
t[n].l = l;
t[n].r = r;
if (l == r)
{
t[n].max = a[l];
return;
}
int mid = (l + r) >> 1;
js(n * 2, l, mid);
js(n * 2 + 1, mid + 1, r);
t[n].max = max(t[n * 2].max, t[n * 2 + 1].max);
}
void xg(int n, int x, int y)
{
if (t[n].l ==t[n].r)
{
t[n].max = max(y, t[n].max);
return;
}
int mid = (t[n].l + t[n].r) >> 1;
if (x <= mid) xg(n * 2, x, y);
else xg(n * 2 + 1, x, y);
t[n].max = max(t[n * 2].max, t[n * 2 + 1].max);
}
int zui(int n, int x, int y)
{
if (t[n].l >= x && t[n].r <= y)
{
return t[n].max;
}
int mid = (t[n].l + t[n].r) >> 1,ans=-10;
if (x <= mid) ans = max(ans, zui(n * 2, x, y));
if (y > mid) ans = max(ans, zui(n * 2 + 1, x, y));
return ans;
}
int main()
{
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);
js(1, 1, n);
while (m--)
{
char c;
int x, y;
cin >> c;
scanf("%d %d", &x, &y);
if (c == 'Q') cout << zui(1, x, y)<<endl;
else {
xg(1, x, y);
}
}
return 0;
}
我真的找不出来问题 有大佬帮忙看下吗?