#include <bits/stdc++.h>
using namespace std;
#define all(x) (x).begin(), (x).end()
#define sz(x) (int) (x).size()
typedef long long lint;
typedef pair<lint,lint> ii;
int n;
lint A[500005], B[500005];
lint ans[500005];
void add(int l, int r, lint val){
ans[l] += val;
ans[r+1] -= val;
}
struct sumtool{
lint total = 0;
vector<lint> v, psum;
void push(lint x){
if(v.empty()) v.push_back(x);
else v.push_back(max(v.back(), x));
total += v.back();
psum.push_back(total);
}
lint query(lint x){
int pos = upper_bound(all(v), x) - v.begin();
lint res = total;
if(pos != 0) res -= psum[pos-1];
res += x * pos;
return res;
}
};
struct thing{ lint val, total, cnt; };
lint val[500005], total[500005], tempans[500005];
void dnc(int l, int r){
if(l == r){
add(0, l-1, A[l]);
add(l, n, B[l]);
return;
}
lint res = 0;
int m = (l+r)/2;
///compute for [l, m] first
sumtool R;
for(int i = m+1;i <= r;i++) R.push(A[i]);
lint acc = 0;
for(int i = m;i >= l;i--){
acc = max(acc, A[i]);
val[i] = acc;
total[i] = R.query(acc);
res += total[i];
}
tempans[l-1] = res;
stack<thing> S;
for(int i = l;i <= m;i++){
res -= total[i];
val[i] = max(val[i], B[i]);
int cnt = 1;
while(!S.empty()){
if(S.top().val <= val[i]){
cnt += S.top().cnt;
res -= S.top().total * S.top().cnt;
S.pop();
}
else break;
}
lint total = R.query(val[i]);
res += total * cnt;
S.push({val[i], total, cnt});
tempans[i] = res;
}
///compute for [m+1, R] first
sumtool L;
while(!S.empty()) S.pop();
for(int i = m;i >= l;i--) L.push(B[i]);
acc = 0, res = 0;
for(int i = m+1;i <= r;i++){
acc = max(acc, A[i]);
val[i] = acc;
total[i] = L.query(acc);
res += total[i];
}
for(int i = r;i >= m+1;i--){
if(S.empty() || S.top().val > val[i]) S.push({val[i], total[i], 1});
else S.top().cnt++;
}
for(int i = m+1;i <= r;i++){
res -= S.top().total;
if(S.top().cnt == 1) S.pop();
else S.top().cnt--;
val[i] = max(val[i], B[i]);
if(i != m+1) val[i] = max(val[i], val[i-1]);
int cnt = 1;
while(!S.empty()){
if(S.top().val <= val[i]){
cnt += S.top().cnt;
res -= S.top().total * S.top().cnt;
S.pop();
}
else break;
}
lint total = L.query(val[i]);
res += total * cnt;
S.push({val[i], total, cnt});
tempans[i] = res;
if(S.top().cnt == 1) S.pop();
else S.top().cnt--;
}
add(0, l-1, tempans[l-1]);
add(r, n, tempans[r]);
for(int i = l;i < r;i++) add(i, i, tempans[i]);
dnc(l, m); dnc(m+1, r);
}
int main(){
ios_base::sync_with_stdio(false); cin.tie(0);
cin >> n;
for(int i = 1;i <= n;i++) cin >> A[i];
for(int i = 1;i <= n;i++) cin >> B[i], B[i] += A[i];
dnc(1, n);
lint acc = 0;
for(int i = 0;i <= n;i++){
acc += ans[i];
cout << acc << "\n";
}
}