求调,被绿题强碱了
查看原帖
求调,被绿题强碱了
712068
Snow_Dog7楼主2024/9/24 16:18
#include <bits/stdc++.h>
#define int long long
using namespace std;

struct TREE{
	int v;
	int mark;
}tree[11451414];
int n,s,m;

void pushdown(int v) {
	tree[v * 2].v += tree[v].mark;tree[v * 2 + 1].v += tree[v].mark;
	tree[v * 2].mark += tree[v].mark;tree[v * 2 + 1].mark += tree[v].mark;
}

void push(int v,int l,int r,int ll,int rr,int add) {
	if (l <= ll && r >= rr) {
		tree[v].v += add;
		tree[v].mark += add;
	}
	else {
		if (tree[v].mark) pushdown(v);
		tree[v].mark = 0;
		int mid = (ll + rr) >> 1;
		if (l <= mid) push(v * 2,l,mid,ll,mid,add);
		if (r > mid) push(v * 2 + 1,mid + 1,r,mid + 1,rr,add);
		tree[v].v = max(tree[v * 2].v,tree[v * 2 + 1].v);	
	}
}

int find(int v,int l,int r,int ll,int rr) {
	if (l <= ll && r >= rr) return tree[v].v;
	else {
		if (tree[v].mark) pushdown(v);
		tree[v].mark = 0;
		int ans = 0,mid = (ll + rr) >> 1;
		if (l <= mid) ans = max(ans,find(v * 2,l,mid,ll,mid));
		if (r > mid) ans = max(ans,find(v * 2 + 1,mid + 1,r,mid + 1,rr));
		return ans;
	}

}

signed main() {
	cin >> n >> s >> m ;
	for (int i = 1;i <= m;i++) {
		int x,y,z;cin >> x >> y >> z ;
		if (z + find(1,x,y - 1,1,n) <= s) {
			push(1,x,y - 1,1,n,z);
			cout << "T\n" ;
			continue;
		}
		cout << "N\n" ;
	}
}
2024/9/24 16:18
加载中...