#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 123;
long long a[N], t[N], it[N * 6], lz[N * 6], ans[N], n, res[N];
void load() {}
void down(long long k, long long l, long long r) {
  it[k * 2] += lz[k];
  it[k * 2 + 1] += lz[k];
  lz[k * 2] += lz[k];
  lz[k * 2 + 1] += lz[k];
  lz[k] = 0;
}
void update(long long k, long long x, long long y, long long l, long long r,
            long long val) {
  if (x > r || y < l) return;
  if (x <= l && r <= y) {
    ++it[k];
    ++lz[k];
    return;
  }
  down(k, l, r);
  long long mid = (l + r) / 2;
  update(k * 2, x, y, l, mid, val);
  update(k * 2 + 1, x, y, mid + 1, r, val);
  return;
}
long long get(long long k, long long x, long long l, long long r) {
  if (x > r || x < l) return 0;
  if (x == l && x == r) return it[k];
  down(k, l, r);
  long long mid = (l + r) / 2;
  if (x >= l && x <= mid) return get(k * 2, x, l, mid);
  return get(k * 2 + 1, x, mid + 1, r);
}
void process() {
  scanf("%lld", &n);
  for (long long i = 1; i <= n; ++i) scanf("%lld", &a[i]);
  for (long long i = 1; i <= n; ++i) scanf("%lld", &t[i]);
  for (long long i = n; i > 0; --i) {
    res[i] = res[i + 1] + t[i];
    long long d = i, c = n;
    while (d < c) {
      long long mid = (d + c + 1) / 2;
      if (a[i] >= res[i] - res[mid + 1])
        d = mid;
      else
        c = mid - 1;
    }
    if (a[i] >= res[i] - res[d + 1]) {
      update(1, i, d, 1, n, 1);
      long long tmp = a[i] - (res[i] - res[d + 1]);
      ans[d + 1] += tmp;
    } else
      ans[i] += a[i];
  }
  for (long long i = 1; i <= n; ++i) {
    long long tmp = get(1, i, 1, n);
    printf("%lld ", tmp * t[i] + ans[i]);
  }
}
int main() {
  load();
  process();
  return 0;
}
