19分求助
查看原帖
19分求助
806720
sea_water楼主2024/7/25 18:20
#include<bits/stdc++.h>
using namespace std;
struct aa{
	int x,y;
	bool operator<(const aa &o)const{
		return x<o.x;
	}
};
priority_queue<aa> q;
int n,nn,a[100005],b[100005],z[100005];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++){
		cin>>b[i];
	}
	nn=n;
	for(int i=1;i<=nn;i++){
		cout<<b[i]+a[1]<<" ";
		n--;
		if(n==0) return 0;
		for(int j=2;j<=nn;j++){
			if(q.size()&&b[i]+a[j]>a[z[q.top().y]]+b[q.top().y]){
				while(b[i]+a[j]>a[z[q.top().y]]+b[q.top().y]&&b[i+1]+a[1]>a[z[q.top().y]]+b[q.top().y]){
					if(n==0) return 0;
					cout<<a[z[q.top().y]]+b[q.top().y]<<" ";
					z[q.top().y]++;
					aa dd=q.top();
					q.pop();
					dd.x=a[z[dd.y]]+b[z[dd.y]];
					q.push(dd);
					n--;
				}
				if(b[i+1]+a[1]<=a[z[q.top().y]]+b[q.top().y]&&b[i]+a[j]>=b[i+1]+a[1]){
					aa ddd;
					ddd.x=b[i]+a[j];
					ddd.y=i;
					q.push(ddd);
					break;
				}
			}
			if(b[i]+a[j]>=b[i+1]+a[1]){
				z[i]=j;
				aa ddd;
				ddd.x=b[i]+a[j];
				ddd.y=i;
				q.push(ddd);
				break;
			}
			if(n==0) return 0;
			cout<<b[i]+a[j]<<" ";
		}
		if(n==0) return 0;
	}
	return 0;
}```
2024/7/25 18:20
加载中...