本地可编译运行,提交Unknown Error是怎么回事?
#include <iostream>
using namespace std;
const int MAXN = 2e4 + 10;
int n, q;
int a[MAXN];
struct Node {
int lS, rS, F, S;
} T[MAXN << 2];
Node pushup(Node A, Node B) {
Node ret;
ret.S = A.S + B.S;
ret.lS = max(A.lS, A.S + B.lS);
ret.rS = max(B.rS, B.S + A.rS);
ret.F = max(A.F, B.F);
ret.F = max(ret.F, A.rS + B.lS);
return ret;
}
void build(int rt, int l, int r) {
if (l == r) {
T[rt].F = T[rt].lS = T[rt].rS = T[rt].S = a[l];
return;
}
int mid = (l + r) >> 1;
build(rt << 1, l, mid), build(rt << 1 | 1, mid + 1, r);
T[rt] = pushup(T[rt << 1], T[rt << 1 | 1]);
return;
}
void modify(int rt, int l, int r, int p, int c) { // A[p] = c
if (l == r) {
T[rt].F = T[rt].lS = T[rt].rS = T[rt].S = c;
return;
}
int mid = (l + r) >> 1;
if (p <= mid)
modify(rt << 1, l, mid, p, c);
else
modify(rt << 1 | 1, mid + 1, r, p, c);
T[rt] = pushup(T[rt << 1], T[rt << 1 | 1]);
}
Node query(int x, int y, int l, int r, int rt) {
if (x <= l && r <= y)
return T[rt];
int mid = (l + r) >> 1;
if (y <= mid)
return query(x, y, l, mid, rt << 1); // 右区间和查询区间没有交,答案在左区间
if (x > mid)
return query(x, y, mid + 1, r, rt << 1 | 1);
return pushup(query(x, y, l, mid, rt << 1), query(x, y, mid + 1, r, rt << 1 | 1));
}
int main() {
ios :: sync_with_stdio(false);
cin >> n;
for (int i = 1; i <= n; i ++)
cin >> a[i];
build(1, 1, n);
cin >> q;
while (q --) {
int op, x, y;
cin >> op >> x >> y;
if (op == 1) {
cout << query(x, y, 1, n, 1).F << endl;
} else {
modify(1, 1, n, x, y);
}
}
return 0;
}
c++