我是真的看不出来我哪里模拟的有问题了
#include<bits/stdc++.h>
#define int long long
#define ec 114514
#define fi first
#define se second
using namespace std;
struct node
{int t,st,ed,id;}a[ec];
int n,m,t,mq=1,up,down;
int ans[ec];
priority_queue<pair<int,int> > down1,down2;
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > up1,up2;
int read()
{
char c=getchar();int x=0;
while(!isdigit(c)) c=getchar();
while(isdigit(c)) x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x;
}
bool cmp(node x,node y){return x.t<y.t;}
signed main()
{
n=read(),m=read();
for(int i=1;i<=n;i++) a[i].t=read(),a[i].st=read(),a[i].ed=read(),a[i].id=i;
sort(a+1,a+1+n,cmp);a[n+1].t=1145141919810;
for(int i=1;i<=n+1;i++)
{
int sysj=a[i].t-a[i-1].t;t=a[i-1].t;
up=up1.size()+up2.size();down=down1.size()+down2.size();
while(sysj&&up+down>0)
if(up>=down)
{
int xysj=0x3f3f3f3f3f3f3f3f;
if(!up2.empty()) xysj=min(xysj,up2.top().fi);
if(!up1.empty()) xysj=min(xysj,up1.top().fi);
xysj-=mq;
if(xysj>sysj){mq+=sysj;break;}
if(!up2.empty()&&mq+xysj==up2.top().fi)
while(!up2.empty()&&up2.top().fi==mq+xysj)
{
int u=up2.top().se;up2.pop();
if(a[u].ed>mq+xysj) up1.push(make_pair(a[u].ed,a[u].id));
else down1.push(make_pair(a[u].ed,a[u].id));
}
if(!up1.empty()&&mq+xysj==up1.top().fi)
while(!up1.empty()&&up1.top().fi==mq+xysj)
{
int u=up1.top().se;up1.pop();
ans[u]=t+xysj;
}
sysj-=xysj;t+=xysj;mq+=xysj;
}
else
{
int xysj=-1;
if(!down2.empty()) xysj=max(xysj,down2.top().fi);
if(!down1.empty()) xysj=max(xysj,down1.top().fi);
xysj=mq-xysj;
if(xysj>sysj){mq-=sysj;break;}
if(!down2.empty()&&mq-xysj==down2.top().fi)
while(!down2.empty()&&down2.top().fi==mq-xysj)
{
int u=down2.top().se;down2.pop();
if(a[u].ed>mq-xysj) up1.push(make_pair(a[u].ed,a[u].id));
else down1.push(make_pair(a[u].ed,a[u].id));
}
if(!down1.empty()&&mq-xysj==down1.top().fi)
while(!down1.empty()&&down1.top().fi==mq-xysj)
{
int u=down1.top().se;down1.pop();
ans[u]=t+xysj;
}
sysj-=xysj;t+=xysj;mq-=xysj;
}
if(i>n) break;
if(a[i].st==mq)
if(a[i].ed>mq) up1.push(make_pair(a[i].ed,a[i].id));
else down1.push(make_pair(a[i].ed,a[i].id));
else
if(a[i].st>mq) up2.push(make_pair(a[i].st,i));
else down2.push(make_pair(a[i].st,i));
while(a[i+1].t==a[i].t)
{
i++;
if(a[i].st==mq)
if(a[i].ed>mq) up1.push(make_pair(a[i].ed,a[i].id));
else down1.push(make_pair(a[i].ed,a[i].id));
else
if(a[i].st>mq) up2.push(make_pair(a[i].st,i));
else down2.push(make_pair(a[i].st,i));
}
}
for(int i=1;i<=n;i++) cout<<ans[i]<<endl;
return 0;
}