重发一下,0分求助
查看原帖
重发一下,0分求助
735763
_ChongYun_楼主2023/4/18 18:56

rt

#include<bits/stdc++.h>
using namespace std;
struct node{
	int t,l,r;
	friend bool operator<(node a,node b){
		return a.t>b.t;
	}
}a[114514];
queue<node> wtque;
priority_queue<node> que;
int pre[114514],nxt[114514];
int l[114514],r[114514];
int st=1,ed=2,cnt=3;
int T,M,P,n,ans1,ans2;
void del(int k){
	nxt[pre[k]]=nxt[k];
	pre[nxt[k]]=pre[k];
	return ;
}
void inse(int p,int ll,int rr){
	pre[++cnt]=p;
	nxt[cnt]=nxt[p];
	pre[nxt[cnt]]=cnt;
	nxt[p]=cnt;
	l[cnt]=ll,r[cnt]=rr;
	if(pre[cnt]!=st&&r[pre[cnt]]+1==l[cnt]){
		l[cnt]=l[pre[cnt]];
		del(pre[cnt]);
	}
	if(nxt[cnt]!=ed&&r[cnt]+1==l[nxt[cnt]]){
		r[cnt]=r[nxt[cnt]];
		del(nxt[cnt]);
	}
	return ;
}
void add(int ll,int rr){
	for(int i=st;i!=ed;i=nxt[i]){
		if(rr>r[nxt[i]]){
			continue;
		}
		inse(i,ll,rr);
		return ;
	}
	return ;
}
bool fi(int t,int m,int p){
	for(int i=nxt[st];i!=ed;i=nxt[i]){
		int len=r[i]-l[i]+1;
		if(len<m){
			continue;
		}else if(len==m){
			que.push({l[i],r[i],t+p});
			del(i);
			return true;
		}else{
			que.push({l[i],l[i]+m-1,t+p});
			l[i]+=m;
			return true;
		}
	}
	return false;
}
int main(){
	cin>>n;
	nxt[st]=3,pre[3]=st;
	nxt[3]=ed,pre[ed]=3;
	l[3]=0,r[3]=n-1;
	l[st]=-1,r[st]=-1;
	l[ed]=n,r[ed]=n;
	while(cin>>T>>M>>P){
		if(!T&&!M&&!P){
			break;
		}
		while(!que.empty()&&que.top().t<=T){
			int t=que.top().t;
			while(!que.empty()&&que.top().t==t){
				auto tmp=que.top();
				que.pop();
				add(tmp.l,tmp.r);
			}
			while(!wtque.empty()){
				auto tmp=wtque.front();
				if(fi(t,tmp.r,tmp.t)==true){
					wtque.pop();
					continue;
				}
				break;
			}
		}
		if(fi(T,M,P)){
			continue;
		}else{
			wtque.push({T,M,P});
			ans2++;
		}
	}
	while(!que.empty()){
		int t=que.top().t;
		while(!que.empty()&&que.top().t==t){
			auto tmp=que.top();
			ans1=tmp.t;
			que.pop();
			add(tmp.l,tmp.r);
		}
		while(!wtque.empty()){
			auto tmp=wtque.front();
			if(fi(t,tmp.r,tmp.t)==true){
				wtque.pop();
				continue;
			}
			break;
		}
//		cout<<ans1<<" ";
	}
	cout<<ans1<<endl<<ans2<<endl;
	return 0;
}
/*
	In The Luogu:
    I'm _oHAMBURGERo_. 
    I AK IOI every day!  
*/
2023/4/18 18:56
加载中...