rt,不知道为什么,如果修改时加上
if(tr[id].r < l || tr[id].l > r){
return ;
}
就会WA,否则为RE
#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[600005 * 7];
int a[600005];
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;
}
return ;
}
void bulid(int id,int l,int r){
tr[id].l = l,tr[id].r = r,tr[id].v = 0;
if(l == r)return ;
int mid = (l + r) >> 1;
bulid(lid,l,mid);
bulid(rid,mid + 1,r);
tr[id].v = max(tr[lid].v,tr[rid].v);
}
void ch(int id,int l,int r,int d){
if(tr[id].r < l || tr[id].l > r){
tr[id].v += d;
tr[id].t += d;
return ;
}
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;
pd(id);
if(l <= mid){
ch(lid,l,r,d);
}
if(r > mid){
ch(rid,l,r,d);
}
tr[id].v = max(tr[lid].v,tr[rid].v);
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin >> c >> s >> r;
bulid(1,1,s);
while(r--){
int o,d,n;
cin >> o >> d >> n;
if(d - 1 >= o)ch(1,o,d - 1,n);
if(tr[1].v > s){
ch(1,o,d - 1,-n);
cout << "N" << '\n';
}
else cout << "T" << '\n';
}
}