记录编号 258266 评测结果 AAAAAAAAAA
题目名称 [NOIP 2015PJ]推销员 最终得分 100
用户昵称 Gravatar再见 是否通过 通过
代码语言 C++ 运行时间 0.254 s
提交时间 2016-05-05 13:47:28 内存使用 1.17 MiB
显示代码纯文本
#include<cstdio>
#include<cstdlib>
#include<queue>
using namespace std;

struct node{
	int id,val;
	node(int _id,int _val):id(_id),val(_val){}
	bool operator<(const node &a)const{return a.val>val;}
}now(0,0),lmax(0,0),rmax(0,0);
priority_queue<node> Ql,Qr;
int n,s[100010],a[100010],ans,ndis;
bool vis[100010];

int main()
{
	freopen("2015salesman.in","r",stdin);
	freopen("2015salesman.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&s[i]);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	for(int i=1;i<=n;i++)
		Ql.push(node(i,a[i])),Qr.push(node(i,a[i]+s[i]*2));
	now=Qr.top();Qr.pop();
	ans=now.val;ndis=s[now.id];
	vis[now.id]=true;
	printf("%d\n",ans);
	for(int i=2;i<=n;i++){
		while(!Ql.empty()){
			lmax=Ql.top();
			if(!vis[lmax.id]) break;
			Ql.pop();
		}
		while(!Qr.empty()){
			rmax=Qr.top();
			if(!vis[rmax.id]) break;
			Qr.pop();
		}
		if(Ql.empty()) lmax.val=-1;
		if(Qr.empty()) rmax.val=-1;
		if(lmax.val>rmax.val-ndis*2){
			Ql.pop();
			vis[lmax.id]=true;
			ans+=lmax.val;
		}
		else{
			Qr.pop();
			vis[rmax.id]=true;
			ans+=rmax.val-ndis*2;
			ndis=s[rmax.id];
		}
		printf("%d\n",ans);
	}
	return 0;
}