数据过水
查看原帖
数据过水
437368
J2a0m0e8s楼主2022/11/9 16:24
#include<bits/stdc++.h>
#define N 100009
using namespace std;
int n,s[N],a[N],nm;long long ans;
struct ppp{
	int to;long long dis;
	bool operator <(const ppp &x)const{
		return dis<x.dis;
	}
};
priority_queue<ppp>q1,q2;
bool vis[N];
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)cin>>s[i];
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=1;i<=n;i++)q2.push({i,s[i]*2+a[i]});
	for(int j=1;j<=n;j++){
		int t1,t2;
		ppp x,y;
		while(!q2.empty()&&q2.top().to<=nm)q2.pop();
		if(q1.empty()){
			x=q2.top();
			q2.pop();
			ans+=x.dis-2*s[nm];
			for(int i=nm+1;i<x.to;i++)q1.push({i,a[i]});
			printf("%lld\n",ans);
			nm=x.to;
			continue;
		}
		if(q2.empty()){
			x=q1.top();
			q1.pop();
			ans+=x.dis;
			printf("%lld\n",ans);
			continue;
		}
		x=q1.top(),y=q2.top();
		int scp=y.dis-2*s[nm],sco=x.dis;
		if(scp>sco){ans+=scp;printf("%lld\n",scp);for(int i=nm+1;i<y.to;i++)q1.push({i,a[i]});nm=y.to;q2.pop();}
	    else{ans+=sco;printf("%lld\n",ans);q1.pop();}
	}
	return 0;
}

这篇代码在40行有误(应将 printfprintf 处的 scpscp 改为 ansans),但是可以通过本题。

建议加强数据。

2022/11/9 16:24
加载中...