Unknown Error是怎么回事啊??
查看原帖
Unknown Error是怎么回事啊??
245089
i_am_a_joker楼主2022/11/23 12:50

本地可编译运行,提交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++

2022/11/23 12:50
加载中...