#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
long long tr[N << 2], lz[N << 2];
int p[N], a[N], pos[N];
void push(int v, int l, int r) {
  tr[v] += lz[v];
  if (l != r) {
    lz[2 * v] += lz[v];
    lz[2 * v + 1] += lz[v];
  }
  lz[v] = 0;
}
void update(int v, int s, int e, int l, int r, int x) {
  push(v, s, e);
  if (e < l || r < s || r < l) return;
  if (l <= s && e <= r) {
    tr[v] += x;
    if (s != e) {
      lz[2 * v] += x;
      lz[2 * v + 1] += x;
    }
    return;
  }
  int m = (s + e) / 2;
  update(2 * v, s, m, l, r, x);
  update(2 * v + 1, m + 1, e, l, r, x);
  tr[v] = min(tr[2 * v], tr[2 * v + 1]);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cout << setprecision(32);
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> p[i];
    pos[p[i]] = i;
  }
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
  }
  memset(tr, 0, sizeof(tr));
  memset(lz, 0, sizeof(lz));
  for (int i = 1; i <= n; i++) {
    update(1, 1, n - 1, pos[i], n - 1, a[pos[i]]);
  }
  long long ans = tr[1];
  for (int i = 1; i <= n; i++) {
    update(1, 1, n - 1, pos[i], n - 1, -a[pos[i]]);
    update(1, 1, n - 1, 1, pos[i] - 1, a[pos[i]]);
    ans = min(ans, tr[1]);
  }
  cout << ans << '\n';
  return 0;
}
