#include<bits/stdc++.h>
#define N 100009
using namespace std;
int n,s[N],a[N],nm;long long ans;
struct ppp{
int to;long long dis;
bool operator <(const ppp &x)const{
return dis<x.dis;
}
};
priority_queue<ppp>q1,q2;
bool vis[N];
int main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>s[i];
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++)q2.push({i,s[i]*2+a[i]});
for(int j=1;j<=n;j++){
int t1,t2;
ppp x,y;
while(!q2.empty()&&q2.top().to<=nm)q2.pop();
if(q1.empty()){
x=q2.top();
q2.pop();
ans+=x.dis-2*s[nm];
for(int i=nm+1;i<x.to;i++)q1.push({i,a[i]});
printf("%lld\n",ans);
nm=x.to;
continue;
}
if(q2.empty()){
x=q1.top();
q1.pop();
ans+=x.dis;
printf("%lld\n",ans);
continue;
}
x=q1.top(),y=q2.top();
int scp=y.dis-2*s[nm],sco=x.dis;
if(scp>sco){ans+=scp;printf("%lld\n",scp);for(int i=nm+1;i<y.to;i++)q1.push({i,a[i]});nm=y.to;q2.pop();}
else{ans+=sco;printf("%lld\n",ans);q1.pop();}
}
return 0;
}
这篇代码在40行有误(应将 printf 处的 scp 改为 ans),但是可以通过本题。
建议加强数据。