社区讨论
8分,求助!
P8856[POI 2002] 火车线路参与者 2已保存回复 9
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 9 条
- 当前快照
- 1 份
- 快照标识符
- @lo1x10t5
- 此快照首次捕获于
- 2023/10/23 04:22 2 年前
- 此快照最后确认于
- 2023/11/03 04:49 2 年前
rt,WA+RE+TLE(汗
CPP#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int MAXN=1e4+10;
int C,S,R;
struct node
{
int l,r;
int maxn;
} tr[MAXN*24];
void Pushup(node &u,node &l,node &r)
{
u.maxn=max(l.maxn,r.maxn);
}
void pushup(int u)
{
Pushup(tr[u],tr[u<<1],tr[u<<1|1]);
}
void build(int u,int l,int r)
{
if(l==r)
{
tr[u]= {l,r,0};
}
else
{
tr[u].l=l,tr[u].r=r;
int mid=l+r>>1;
build(u<<1,l,mid);
build(u<<1|1,mid+1,r);
pushup(u);
}
}
void change(int u,int x,int v)
{
if(tr[u].l==x && tr[u].r==x)
{
tr[u]= {x,x,tr[u].maxn+v};
}
else
{
int mid=tr[u].l+tr[u].r>>1;
if(x<=mid) change(u<<1,x,v);
else change(u<<1|1,x,v);
pushup(u);
}
}
node query(int u,int l,int r)
{
if(tr[u].l>=l && tr[u].r<=r) return tr[u];
else
{
int mid=tr[u].l+tr[u].r>>1;
if(r<=mid) return query(u<<1,l,r);
else if(l>mid) return query(u<<1|1,l,r);
else
{
auto left=query(u<<1,l,r);
auto right=query(u<<1|1,l,r);
node res;
Pushup(res,left,right);
return res;
}
}
}
int main()
{
cin>>C>>S>>R;
build(1,1,C);
for(int i=1; i<=R; i++)
{
int l,r,d;
cin>>l>>r>>d;
if(S-query(1,l,r).maxn>=d)
{
change(1,l,d);
if(r+1<=R)change(1,r+1,-d);
cout<<"T"<<endl;
}
else
{
cout<<"N"<<endl;
}
}
return 0;
}
回复
共 9 条回复,欢迎继续交流。
正在加载回复...