求助32分
查看原帖
求助32分
895690
gghack_Nythix楼主2023/4/14 18:16

rt,这是测评记录

re + wa + tle很纳闷

#include <bits/stdc++.h>
#define int long long
#define lid id << 1
#define rid id << 1 | 1
using namespace std;
struct tree{
	int l,r,t,v;
}tr[6000005];
int a[6000005],ans = 0x7fffffff;
int c,s,r;
void pd(int id){
	if(tr[id].t){
		tr[lid].t += tr[id].t;
		tr[rid].t += tr[id].t;
		tr[lid].v += tr[id].t;
		tr[rid].v += tr[id].t;
		tr[id].t = 0;
	}
}
void bulid(int id,int l,int r){
	tr[id].l = l,tr[id].r = r;
	if(l == r){
		tr[id].v = s;
		return ;
	}
	int mid = (l + r) >> 1;
	bulid(lid,l,mid);
	bulid(rid,mid + 1,r);
	tr[id].v = min(tr[lid].v,tr[rid].v);
}
int qur(int id,int l,int r){
	int fvv = -1e7;
	pd(id);
	if(tr[id].l >= l && tr[id].r <= r){
		ans = min(ans,tr[id].v);
		return tr[id].v <= ans?1:0;
	}
	int mid = (tr[id].l + tr[id].r) >> 1;
	if(l <= mid){
		fvv = max(qur(lid,l,r),fvv);
	}
	if(r > mid){
		fvv = max(qur(rid,l,r),fvv);
	}
	tr[id].v = min(tr[lid].v,tr[rid].v);
}
void ch(int id,int l,int r,int d){
	pd(id);
	if(tr[id].l >= l && tr[id].r <= r){
		tr[id].v += d;
		tr[id].t += d;
		return ;
	}
	int mid = (tr[id].l + tr[id].r) >> 1;
	if(l <= mid){
		ch(lid,l,r,d);
	}
	if(r > mid){
		ch(rid,l,r,d);
	}
	tr[id].v = min(tr[lid].v,tr[rid].v);
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin >> c >> s >> r;
	bulid(1,1,s + 5);
	while(r--){
		int o,d,n;
		cin >> o >> d >> n;
		qur(1,o,d - 1);
		if(ans >= n){
			cout << "T" << endl;
			ch(1,o,d - 1,-n);
		}
		else if(ans < n){
			cout << "N" << endl;
		}
	}
}

2023/4/14 18:16
加载中...