提交记录在这里
#include<iostream>
#define ll long long
using namespace std;
ll c,s,r;
struct node{
ll l;
ll r;
node* lc;
node* rc;
ll minn;
ll crazycat;
} tr;
void build(node& rt,ll l,ll r){
rt.l=l;rt.r=r;rt.minn=s;rt.crazycat=0;
if(l==r) return;
ll mid=(l+r)>>1;
rt.lc=new node;
rt.rc=new node;
build(*rt.lc,l,mid);
build(*rt.rc,mid+1,r);
return;
}
void pushdown(node& rt){
node &lc=*(rt.lc),&rc=*(rt.rc);
lc.crazycat+=rt.crazycat;
rc.crazycat+=rt.crazycat;
lc.minn-=rt.crazycat;
rc.minn-=rt.crazycat;
rt.crazycat=0;
return;
}
void reduce(node &rt,ll l,ll r,ll k){
if(rt.r<l||r<rt.l) return;
if(l<=rt.l&&rt.r<=r){
rt.crazycat+=k;
rt.minn-=k;
return;
}
pushdown(rt);
reduce(*(rt.lc),l,r,k);
reduce(*(rt.rc),l,r,k);
rt.minn=min(rt.lc->minn,rt.rc->minn);
return;
}
ll visit(node &rt,ll l,ll r){
if(rt.r<l||r<rt.l) return s;
if(l<=rt.l&&rt.r<=r) return rt.minn;
pushdown(rt);
rt.minn=min(rt.lc->minn,rt.rc->minn);
int a=visit(*(rt.lc),l,r),b=visit(*(rt.rc),l,r);
return min(a,b);
}
int main(void){
cin>>c>>s>>r;
build(tr,1,c);
for(int i=0;i<r;i++){
int o,d,n,l;cin>>o>>d>>n;
if(visit(tr,o,d-1)>=n){
cout<<"T\n";
reduce(tr,o,d-1,n);
}else{
cout<<"N\n";
}
}
return 0;
}