rt,代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
struct node{
int tr, tg;
void tag(int d){
tr += d;
tg += d;
}
} tr[240010];
int c, s, r;
void push_down(int p){
tr[p*2].tag(tr[p].tg);
tr[p*2+1].tag(tr[p].tg);
tr[p].tg = 0;
}
void update(int p, int s, int t, int l, int r, int d){
if (l <= s && t <= r){
tr[p].tag(d);
return;
}
int mid=s+t>>1;
push_down(p);
if (r <= mid)
update(p*2, s, mid, l, r, d);
else if (l > mid)
update(p*2+1, mid+1, t, l, r, d);
else{
update(p*2, s, mid, l, r, d);
update(p*2+1, mid+1, t, l, r, d);
}
tr[p].tr = max(tr[p*2].tr, tr[p*2+1].tr);
}
int query(int p, int s, int t, int l, int r){
if (l <= s && t <= r)
return tr[p].tr;
int mid=s+t>>1;
if (r <= mid)
return query(p*2, s, mid, l, r);
else if (l > mid)
return query(p*2+1, mid+1, t, l, r);
else
return max(query(p*2, s, mid, l, r), query(p*2+1, mid+1, t, l, r));
}
signed main(){
cin >> c >> s >> r;
while (r--){
int o, d, n;
cin >> o >> d >> n;
if (query(1, 1, c, o, d-1) <= s - n){
cout << 'T' << '\n';
update(1, 1, c, o, d-1, n);
}
else
cout << 'N' << '\n';
}
}