记录编号 |
462096 |
评测结果 |
AAAAAAAAAA |
题目名称 |
艺术 |
最终得分 |
100 |
用户昵称 |
Hzoi_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]);
}