玄关 !求助,WA第四个点
查看原帖
玄关 !求助,WA第四个点
957917
ljkgs6789楼主2024/7/8 20:05
#include<bits/stdc++.h>
using namespace std;
#define ll long long 
ll n,p,now,ds,cnt=1,cntsum,cntbyd;
struct node{
	ll two;
	ll t,id;
	bool operator < (const node &x)const{
		return t>x.t;
	}
}ed[100010],sum[100010],byd[100010];
struct node1{
	ll two;
	ll t,id;
}c;
struct node2{
	ll id,num;
}ans[100010];
bool cmp(node2 x,node2 y){
	return x.id<y.id;
}
deque<node1> mq;
priority_queue<node> mq1;
int main(){
	cin>>n>>p;
	for(int i=1;i<=n;i++){
		cin>>ed[i].t;
		ed[i].id=i;
	}
	for(int i=1;i<=n;i++){
		mq1.push(ed[i]);
	}
	now=ed[1].t+p;
	node ppp=mq1.top();
	mq1.pop();
	node1 pp;
	pp.id=ppp.id;pp.t=ppp.t;pp.two=ppp.two;
	mq.push_front(pp);
	ans[cnt].id=pp.id;
	ans[cnt].num=now;
	while(cnt<n){
		cntbyd=0;
		cntsum=0;
		if(mq.empty()&&!mq1.empty()){
			node b=mq1.top();
			mq1.pop();
			b.two=0;
			c.two=b.two;
			c.id=b.id; 
			c.t=b.t;
			mq.push_front(c);
		}
		if(ds==1){
			node1 x=mq.back();
			mq.pop_back();
			ans[++cnt].id=x.id;
			now+=p;
			ans[cnt].num=now;
			ds=0;
		}
		node a=mq1.top();
		while(a.t<=now&&!mq1.empty()){
			a=mq1.top();
			mq1.pop();
			a.two=1;
			sum[++cntsum]=a;
		}
		for(int i=1;i<=cntsum;i++){
			mq1.push(sum[i]);
		}
		node1 minn=mq.front();
		node minm=mq1.top();
		node minx;
		minx.id=1000100;
		while(!mq1.empty()){
			minm=mq1.top();
			if(minm.id<minn.id){
				if(minm.two==1){
					mq1.pop();
					minm.two=0;
					if(minx.id>minm.id){
						minx.id=minm.id;
						minx.t=minm.t;
						minx.two=minm.two;
					}
				}else{
					byd[++cntbyd]=mq1.top();
					mq1.pop();
				}
			}else{
				byd[++cntbyd]=mq1.top();
				mq1.pop();
			}
		}
		minn.id=minx.id;
		minn.t=minx.t;
		minn.two=minx.two;
		mq.push_front(minn);
		for(int i=1;i<=cntbyd;i++){
			mq1.push(byd[i]);
		}
		if(ds==0){
			ds=1;
		}
	}
	sort(ans+1,ans+1+n,cmp);
	for(int i=1;i<=n;i++){
		cout<<ans[i].num<<" ";
	}
	return 0;
}
2024/7/8 20:05
加载中...