记录编号 462096 评测结果 AAAAAAAAAA
题目名称 艺术 最终得分 100
用户昵称 GravatarHzoi_QTY 是否通过 通过
代码语言 C++ 运行时间 0.228 s
提交时间 2017-10-21 10:31:16 内存使用 126.20 MiB
显示代码纯文本
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define mod 998244353
#define N 4000005
#define ll long long
using namespace std;
inline int read()
{
 	int sum=0,f=1;char x=getchar();
 	while(x<'0'||x>'9'){if(x=='-')f=-1;x=getchar();}
 	while(x>='0'&&x<='9'){sum=(sum<<3)+(sum<<1)+x-'0';x=getchar();}
 	return sum*f;
}
int n,f[N],a[N];
bool vis[N];
ll p[N],cnt[N],ans[N];
inline int find(int x){return f[x]==x?x:f[x]=find(f[x]);}
int main()
{
	freopen("art.in","r",stdin);
	freopen("art.out","w",stdout);
	n=read();
	for(int i=1;i<=n;i++)p[i]=read();
	for(int i=1;i<=n;i++)a[i]=read(),f[i]=i,cnt[i]=p[i];
	int fx,fy;ll h=0;
	for(int i=n;i>=1;i--)
	{
		vis[a[i]]=1;
		if(vis[a[i]-1])
		{
			int fx=find(a[i]-1);
			f[a[i]]=fx;
			cnt[fx]+=p[a[i]];
		}
		if(vis[a[i]+1])
		{
			int fx=find(a[i]+1),fy=find(a[i]);
			f[fy]=fx;
			cnt[fx]+=cnt[fy];
		}
		int fx=find(a[i]);
		ans[i-1]=max(ans[i],cnt[fx]);
	}
	ll s=0;
	for(int i=1;i<=n;i++)
		printf("%lld\n",ans[i]);
}