| 记录编号 |
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(){;}