为什么会RE|玄关
查看原帖
为什么会RE|玄关
846041
__xxy_free_ioi__楼主2024/11/26 20:20

#1 #3 #4 #5 #6 #7 #8 #10 #11 #11 RE

#2 AC

#9 WA

#include <bits/stdc++.h>

using namespace std;

const int N = 6e5 + 10;

#define ll long long

struct tree {
	ll sum, tag;
} t[4 * N];

int c, s, r, o, d, n;

void push(int u) {
	t[u].sum = max(t[u << 1].sum, t[u << 1 | 1].sum);
}

void addtag(int u, int l, int r, int k) {
	t[u].tag += k;
	t[u].sum += k;
}

void pushdown(int u, int l, int r) {
	int mid = (l + r) >> 1;
	addtag(u << 1, l, mid, t[u].tag);
	addtag(u << 1 | 1, mid + 1, r, t[u].tag);
	t[u].tag = 0; // tag必须清空!!! 
}

void modify(int u, int l, int r, int x, int y, int k) {
	if (x <= l && r <= y) {
		addtag(u, l, r, k);
		return;
	}
	pushdown(u, l, r);
	int mid = (l + r) >> 1; 
	if (x <= mid) modify(u << 1, l, mid, x, y, k);
	if (mid < y) modify(u << 1 | 1, mid + 1, r, x, y, k);
	push(u);
}

ll query(int u, int l, int r, int x, int y) {
	ll ans = 0;
	if (x <= l && r <= y) {
		return t[u].sum;
	}
	pushdown(u, l, r);
	int mid = (l + r) >> 1;
	if (x <= mid) ans = query(u << 1, l, mid, x, y);
	if (mid < y) ans = max(ans, query(u << 1 | 1, mid + 1, r, x, y));
	return ans;
}

int main() {
	cin >> c >> s >> r;
	while (r--) {
		cin >> o >> d >> n;
		modify(1, 1, c, o, d - 1, n);
		if (query(1, 1, n, o, d - 1) > s) {
			modify(1, 1, c, o, d - 1, -n);
			cout << "N\n";
		} else cout << "T\n";
	}
	return 0;
} 
2024/11/26 20:20
加载中...