#include <bits/stdc++.h>
using namespace std;
long long A[100010 << 2];
long long a[100010], b[100010], c[100010];
void update(int k, int L, int R, int l, int r) {
  if (r < l) return;
  if (l == L && r == R) {
    A[k]++;
    return;
  }
  long long mid = (L + R) / 2;
  if (r <= mid)
    update(2 * k, L, mid, l, r);
  else if (l > mid)
    update(2 * k + 1, mid + 1, R, l, r);
  else {
    update(2 * k, L, mid, l, mid);
    update(2 * k + 1, mid + 1, R, mid + 1, r);
  }
}
long long query(int k, int L, int R, int t) {
  if (L == R) return A[k];
  long long mid = (L + R) / 2;
  if (t <= mid)
    return query(2 * k, L, mid, t) + A[k];
  else
    return query(2 * k + 1, mid + 1, R, t) + A[k];
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%lld", &a[i]);
  memset(b, 0, sizeof(b));
  for (int i = 1; i <= n; i++) {
    int t;
    scanf("%d", &t);
    b[i] = b[i - 1] + t;
  }
  for (int i = 1; i <= n; i++) {
    a[i] += b[i - 1];
    long long j = 1ll * (lower_bound(b + i, b + n + 1, a[i]) - b);
    c[j] += a[i] - b[j - 1];
    update(1, 1, n, i, j - 1);
  }
  for (int i = 1; i <= n; i++) {
    c[i] += query(1, 1, n, i) * (b[i] - b[i - 1]);
    printf("%lld ", c[i]);
  }
  return 0;
}
