写代码一定要规范,不然很多玄学错误,你都搞不懂...2333
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int a[N],fa[N],b[N];
long long sum[N];
int f(int x)
{
if(fa[x]==x) return x;
else return fa[x]=f(fa[x]);
}
vector<long long>ans;
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++) scanf("%d",&b[i]);
long long pos=0;
ans.push_back(pos);
for(int i=n;i>1;i--)
{
int x=b[i];
sum[x]=a[x];fa[x]=x;
if(fa[x-1])
{
int fy=f(x-1);
if(x!=fy)
{
sum[x]+=sum[fy];
fa[fy]=x;
}
}
if(fa[x+1])
{
int fy=f(x+1);
if(x!=fy)
{
sum[x]+=sum[fy];
fa[fy]=x;
}
}
pos=max(pos,sum[x]);
ans.push_back(pos);
}
for(int i=ans.size()-1;i>=0;i--) printf("%lld\n",ans[i]);
return 0;
}
京公网安备 11010502036488号