#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n;
struct node{
ll a,s;
}h[100010];
struct Max{
ll ord,val;
};
struct Tree{
ll lazy;
ll mx,l,r,ord;
}b[400010];
Max st[100010];
void build(int l,int r,int rot){
if(l==r){
b[rot].l=l;
b[rot].r=r;
b[rot].mx=h[l].a;
b[rot].lazy=-1;
b[rot].ord=l;
return ;
}
int mid=(l+r)>>1;
build(l,mid,rot*2);
build(mid+1,r,rot*2+1);
if(b[rot*2].mx<b[rot*2+1].mx){
b[rot].ord=b[rot*2+1].ord;
}else{
b[rot].ord=b[rot*2].ord;
}
b[rot].mx=max(b[rot*2].mx,b[rot*2+1].mx);
b[rot].l=b[rot*2].l;
b[rot].r=b[rot*2+1].r;
b[rot].lazy=-1;
return ;
}
void down(int rot){
if(b[rot].lazy!=-1){
b[rot*2].mx=b[rot].lazy;
b[rot*2].ord=b[rot*2].l;
b[rot*2].lazy=b[rot].lazy;
b[rot*2+1].lazy=b[rot].lazy;
b[rot*2+1].ord=b[rot*2+1].l;
b[rot*2+1].mx=b[rot].lazy;
b[rot].lazy=-1;
}
return ;
}
void update(int l,int r,int rot,int x,int y,int k){
if(l>y||r<x){
return ;
}
if(x<=l&&r<=y){
b[rot].lazy=k;
b[rot].ord=l;
b[rot].mx=k;
return ;
}
int mid=(l+r)>>1;
down(rot);
if(x<=mid) update(l,mid,rot*2,x,y,k);
if(y>mid) update(mid+1,r,rot*2+1,x,y,k);
b[rot].mx=max(b[rot*2].mx,b[rot*2+1].mx);
if(b[rot*2].mx<b[rot*2+1].mx){
b[rot].ord=b[rot*2+1].ord;
}else{
b[rot].ord=b[rot*2].ord;
}
}
Max query(int l,int r,int rot,int x,int y){
if(l>r){
return {0,-1};
}
if(l>y||r<x){
return {0,-1};
}
if(x<=l&&r<=y){
return {b[rot].ord,b[rot].mx};
}
int mid=(l+r)>>1;
down(rot);
ll mx,mxx;
Max t1=query(l,mid,rot*2,x,y),t2=query(mid+1,r,rot*2+1,x,y);
mx=max(t1.val,t2.val);
if(t1.val<t2.val){
mxx=t2.ord;
}else{
mxx=t1.ord;
}
return {mxx,mx};
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>h[i].s;
}
for(int i=1;i<=n;i++){
cin>>h[i].a;
}
for(int i=n;i>0;i--){
st[i].val=max(h[i].s+h[i].a,st[i+1].val);
if(h[i].s+h[i].a<st[i+1].val){
st[i].ord=st[i+1].ord;
}else{
st[i].ord=i;
}
}
build(1,n,1);
int mm=0;
ll ans=0;
st[n+1]={0,-114514114514};
for(int i=1;i<=n;i++){
Max t1=query(1,n,1,1,mm-1),t2=st[mm+1];
if(t1.val>2*(t2.val-h[t2.ord].a-h[mm].s)+h[t2.ord].a){
update(1,n,1,t1.ord,t1.ord,0);
ans+=h[t1.ord].a;
cout<<ans<<'\n';
}else{
update(1,n,1,t2.ord,t2.ord,0);
ans+=2*(t2.val-h[t2.ord].a-h[mm].s)+h[t2.ord].a;
mm=t2.ord;
cout<<ans<<'\n';
}
}
return 0;
}