WA on #10,11,13
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=100005;
int n,ans[maxn];
bool vis[maxn];
inline int read(){
int ret=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9') ret=ret*10+ch-'0',ch=getchar();
return ret*f;
}
struct Node{
int s,cst,id;
bool operator<(const Node b)const{return cst>b.cst;}
}e[maxn];
priority_queue<Node> q;
bool check_is_not_only_maxlen(int id){
bool flg=false;
for(int i=id+1;i<=n;i++){
if(e[i].cst!=e[id].cst){
break;
}
if(vis[i]) return true;
}
for(int i=id-1;i>=1;i--){
if(e[i].cst!=e[id].cst){
break;
}
if(vis[i]) return true;
}
return flg;
}
int get_nowdis(int id){
int ansid;
for(int i=id-1;i>=1;i--){
if(vis[i]){ansid=i;break;}
}
return e[ansid].s;
}
signed main(){
n=read();
for(int i=1;i<=n;i++){
e[i].s=read();
e[i].id=i;
}
ans[n]=2*e[n].s;
for(int i=1;i<=n;i++){
ans[n]+=(e[i].cst=read());
q.push(e[i]);
vis[i]=1;
}
int dis=e[n].s;
for(int i=n-1;i>=1;i--){
Node top=q.top();
q.pop();
if(top.s==dis&&(!check_is_not_only_maxlen(top.id))){
Node top2=q.top();
int _2=get_nowdis(top.id);
if(top.cst+2*(dis-_2)<top2.cst){
ans[i]=ans[i+1]-top.cst-2*(dis-_2);
vis[top.id]=0;
dis=_2;
}else{
ans[i]=ans[i+1]-top2.cst;
vis[top2.id]=0;
q.pop();
q.push(top);
}
}else{
ans[i]=ans[i+1]-top.cst;
vis[top.id]=0;
}
}
for(int i=1;i<=n;i++){
cout<<ans[i]<<"\n";
}
return 0;
}