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;
}
}
}