记录编号 462021 评测结果 AAAAAAAAAA
题目名称 2514.艺术 最终得分 100
用户昵称 BaDBoY 是否通过 通过
代码语言 C++ 运行时间 0.083 s
提交时间 2017-10-21 07:37:56 内存使用 1.08 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 100005
bool dead[N];
int Fa[N],Time[N],n;
long long val[N],ans,Ans[N];
int find(int x) {return Fa[x]==x?x:Fa[x]=find(Fa[x]);}
int Main() {
	freopen("art.in","r",stdin);
	freopen("art.out","w",stdout);
	scanf("%d",&n);
	for(int i=1; i<=n; ++i) Fa[i]=i,scanf("%lld",&val[i]);
	for(int i=1; i<=n; ++i) scanf("%d",&Time[i]);
	Fa[0]=0,Fa[n+1]=n+1;
	memset(dead,false,sizeof(dead));
	for(int i=n; i; --i) {
		Ans[++Ans[0]]=ans;
		dead[Time[i]]=true;
		ans=max(ans,val[Time[i]]);
		int pre=find(Time[i]-1),nxt=find(Time[i]+1);
		Time[i]=find(Time[i]);
		if(dead[pre]) {
			if(pre!=Time[i]) {
				Fa[pre]=Time[i];
				val[Time[i]]+=val[pre];
				ans=max(ans,val[Time[i]]);
			}
		}
		if(dead[nxt]) {
			if(nxt!=Time[i]) {
				Fa[nxt]=Time[i];
				val[Time[i]]+=val[nxt];
				ans=max(ans,val[Time[i]]);
			}
		}
	} for(int i=n; i; --i) printf("%lld\n",Ans[i]);
	return 0;
}
int hehe=Main();
int main(){;}