#include <bits/stdc++.h>
using namespace std;
const int mxn = 200001;
int n;
long long a[mxn], b[mxn], first[mxn];
struct segTree {
  int l, r;
  segTree *tl, *tr;
  long long vl, lz;
  segTree(int l, int r) : l(l), r(r) {
    vl = lz = 0;
    if (l != r) {
      int mid = (l + r) / 2;
      tl = new segTree(l, mid);
      tr = new segTree(mid + 1, r);
      pul();
    } else {
      upd(first[l]);
    }
  }
  void upd(long long x) { vl += x, lz += x; }
  void pul() { vl = min(tl->vl, tr->vl); }
  void add(int a, int b, long long v) {
    if (b < l || r < a) return;
    if (a <= l && r <= b) return upd(v);
    tl->upd(lz), tr->upd(lz), lz = 0;
    tl->add(a, b, v), tr->add(a, b, v);
    pul();
  }
};
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  for (int i = 1, x; i <= n; i++) cin >> x, a[x] = i;
  for (int i = 1; i <= n; i++) cin >> b[i], first[i] = b[i] + first[i - 1];
  segTree tre(1, n - 1);
  long long ret = tre.vl;
  for (int i = 1; i <= n; i++) {
    tre.add(1, a[i] - 1, b[a[i]]);
    tre.add(a[i], n, -b[a[i]]);
    ret = min(ret, tre.vl);
  }
  cout << ret << '\n';
  return 0;
}
