#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
int n;
long long a[N], v[N], pos[N], sum[N] = {0, 0}, ans = 0x3f3f3f3f3f3f3f3f;
struct node {
  long long sum, sign, min;
} p[N * 4];
void up(int now) {
  p[now].sum = p[now << 1].sum + p[now << 1 | 1].sum;
  p[now].min = min(p[now << 1].min, p[now << 1 | 1].min);
}
void build(int l, int r, int now) {
  if (l == r) {
    p[now].sum = sum[l];
    p[now].min = sum[l];
    return;
  }
  int mid = (l + r) >> 1;
  build(l, mid, now << 1);
  build(mid + 1, r, now << 1 | 1);
  up(now);
}
void update(int l, int r, int now, long long k) {
  p[now].sign += k;
  p[now].sum += (r - l + 1) * k;
  p[now].min += k;
}
void down(int l, int r, int now) {
  int mid = (l + r) >> 1;
  update(l, mid, now << 1, p[now].sign);
  update(mid + 1, r, now << 1 | 1, p[now].sign);
  p[now].sign = 0;
}
void add(int l, int r, int now, int s, int t, long long k) {
  if (s <= l && r <= t) {
    p[now].sum += k * (r - l + 1);
    p[now].sign += k;
    p[now].min += k;
    return;
  }
  down(l, r, now);
  int mid = (l + r) >> 1;
  if (s <= mid) add(l, mid, now << 1, s, t, k);
  if (t > mid) add(mid + 1, r, now << 1 | 1, s, t, k);
  up(now);
}
long long ask(int l, int r, int now, int s, int t) {
  if (s <= l && r <= t) return p[now].min;
  down(l, r, now);
  long long res = 0x3f3f3f3f3f3f3f3f;
  int mid = (l + r) >> 1;
  if (s <= mid) res = min(ask(l, mid, now << 1, s, t), res);
  if (t > mid) res = min(ask(mid + 1, r, now << 1 | 1, s, t), res);
  return res;
}
int main() {
  std::ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> a[i];
  for (int i = 1; i <= n; i++) cin >> v[i], pos[a[i]] = v[i];
  for (int i = 2; i <= n + 1; i++) sum[i] = sum[i - 1] + pos[i - 1];
  build(1, n + 1, 1);
  for (int i = 1; i <= n - 1; i++) {
    add(1, n + 1, 1, 1, a[i], v[i]);
    add(1, n + 1, 1, a[i] + 1, n + 1, -v[i]);
    ans = min(ask(1, n + 1, 1, 1, n + 1), ans);
  }
  cout << ans;
  return 0;
}
