记录编号 462038 评测结果 AAAAAAAAAA
题目名称 2514.艺术 最终得分 100
用户昵称 BaDBoY 是否通过 通过
代码语言 C++ 运行时间 0.158 s
提交时间 2017-10-21 08:25:58 内存使用 1.67 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 100005
char buf[N*30], *ptr=buf-1;
inline int read(){
    register int x=0,f=1,c=*++ptr;
    while (c<48) c=='-'&&(f=-1),c=*++ptr;
    while (c>47) x=x*10+c-48,c=*++ptr;
    return x * f;
}
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);
	fread(buf,1,sizeof(buf),stdin);
	n=read();
	for(int i=1; i<=n; ++i) Fa[i]=i,val[i]=read();
	for(int i=1; i<=n; ++i) Time[i]=read();
	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(){;}