40pt TLE + RE 求调。。
查看原帖
40pt TLE + RE 求调。。
371404
Amazing_llh楼主2024/11/29 01:58

RE #10 是为什么 https://www.luogu.com.cn/record/191754035

#include <iostream>
#include <algorithm>
using namespace std;

const int MAXN = 1e6 + 3, inf = 0x7fffffff;
int d[MAXN], a[MAXN];

void createTree(int l, int r, int c) {
	if (l != r) {
		int mid = (l + r) / 2;
		createTree(l, mid, c*2);
		createTree(mid + 1, r, c*2 + 1);
		d[c] = max(d[c*2], d[c*2 + 1]);
	} else {
		d[c] = a[l];
	}
}

void realModify(int val, int l1, int r1, int id) {
	d[id] = val;
	int mid = (l1 + r1) / 2;
	if (l1 != r1) {
		realModify(val, l1, mid, id*2);
		realModify(val, mid+1, r1, id*2+1);
	}
}

void modify(int l, int r, int val, int l1, int r1, int id) {
	if (l <= l1 && r >= r1) {
		realModify(val, l1, r1, id);
		return;
	}
	int mid = (l1 + r1) / 2;
	if (l <= mid)
		modify(l, r, val, l1, mid, id*2);
	if (r > mid)
		modify(l, r, val, mid+1, r1, id*2+1);
	d[id] = max(d[id*2], d[id*2+1]);
}

void realAdd(int val, int l1, int r1, int id) {
	d[id] += val;
	int mid = (l1 + r1) / 2;
	if (l1 != r1) {
		realAdd(val, l1, mid, id*2);
		realAdd(val, mid+1, r1, id*2+1);
	}
}

void add(int l, int r, int val, int l1, int r1, int id) {
	if (l <= l1 && r >= r1) {
		realAdd(val, l1, r1, id);
		return;
	}
	int mid = (l1 + r1) / 2;
	if (l <= mid)
		add(l, r, val, l1, mid, id*2);
	if (r > mid)
		add(l, r, val, mid+1, r1, id*2+1);
	d[id] = max(d[id*2], d[id*2+1]);
}

int query(int l, int r, int l1, int r1, int id) {
	if (l <= l1 && r >= r1)
		return d[id];
	int mid = (l1 + r1) / 2, mx1 = -inf, mx2 = -inf;
	if (l <= mid)
		mx1 = query(l, r, l1, mid, id*2);
	if (r > mid)
		mx2 = query(l, r, mid+1, r1, id*2+1);
	return max(mx1, mx2);
}

int main() {
	cin.tie(nullptr), ios::sync_with_stdio(0);
	int n, q;
	cin >> n >> q;
	for (int i=1; i<=n; i++) cin >> a[i];
	createTree(1, n, 1);
	while (q--) {
		int op, l, r, x;
		cin >> op;
		switch (op) {
			case 1:
				cin >> l >> r >> x;
				modify(l, r, x, 1, n, 1);
				break;
			case 2:
				cin >> l >> r >> x;
				add(l, r, x, 1, n, 1);
				break;
			case 3:
				cin >> l >> r;
				cout << query(l, r, 1, n, 1) << endl;
		}
	}
	return 0;
}
2024/11/29 01:58
加载中...