我测试样例过了,但全WA...
而且,当我下载第一组数据后进行测试,发现贼长的数据(2万多个) 只输入了7百多个初始化的数值。
我在测了几个短的数据(自己输入)并调试,未发现问题。
突然感jio好诡异...
#include <iostream>
#define N 200005
using namespace std;
int n, m;
int a[N], g[N * 4];
inline int lc(int p) {
return p << 1;
}
inline int rc(int p) {
return p << 1 | 1;
}
void PushUp(int p) {
g[p] = max(g[lc(p)], g[rc(p)]);
}
void Build(int p, int l, int r) {
if (l == r) {
g[p] = a[l];
return;
}
int mid = (l + r) >> 1;
Build(lc(p), l, mid);
Build(rc(p), mid + 1, r);
PushUp(p);
}
int query(int p, int l, int r, int ql, int qr) {
if (ql <= l && qr >= r) {
return g[p];
}
int mid = (l + r) >> 1;
int x;
if (ql <= mid) {
x = max(x, query(lc(p), l, mid, ql, qr));
}
if (qr >= mid + 1) {
x = max(x, query(rc(p), mid + 1, r, ql, qr));
}
return x;
}
void AddNew(int p, int l, int r, int id, int t) {
if (l == r) {
g[p] = max(g[p], t);
return;
}
int mid = (l + r) >> 1;
if (id <= mid) {
AddNew(lc(p), l, mid, id, t);
}
else if (id > mid) {
AddNew(rc(p), mid + 1, r, id, t);
}
PushUp(p);
}
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
Build(1, 1, n);
char c;
while (m--) {
cin >> c;
int a, b;
if (c == 'Q') {
cin >> a >> b;
int ans=query(1, 1, n, a, b);
cout << ans << endl;
}
else if (c == 'U') {
cin >> a >> b;
AddNew(1, 1, n, a, b);
}
}
return 0;
}