#include <bits/stdc++.h>
using namespace std;
template <typename T>
class segtree {
 private:
  struct node {
    int l, r;
    T lazy, value;
    node() : l(0), r(0), lazy(0), value(0){};
  };
  int n;
  vector<node> a;
  T (*f1)(T, T);
  T (*f2)(T, T, int);
  void add(int &i) {
    i = a.size();
    a.emplace_back(node());
  }
  void lazy(int i, int l, int r) {
    if (!a[i].l) add(a[i].l);
    if (!a[i].r) add(a[i].r);
    int ls = a[i].l, rs = a[i].r, mid = l + r >> 1;
    a[ls].value = f2(a[ls].value, a[i].lazy, mid - l + 1);
    a[ls].lazy = f2(a[ls].lazy, a[i].lazy, 1);
    a[rs].value = f2(a[rs].value, a[i].lazy, r - mid);
    a[rs].lazy = f2(a[rs].lazy, a[i].lazy, 1);
    a[i].lazy = 0;
  }
  void update(int i, int l, int r, int x, int y, T num) {
    if (l >= x && r <= y) {
      a[i].value = f2(a[i].value, num, r - l + 1);
      a[i].lazy = f2(a[i].lazy, num, 1);
      return;
    }
    if (a[i].lazy) lazy(i, l, r);
    int mid = l + r >> 1;
    if (x <= mid) {
      if (!a[i].l) add(a[i].l);
      update(a[i].l, l, mid, x, y, num);
    }
    if (y > mid) {
      if (!a[i].r) add(a[i].r);
      update(a[i].r, mid + 1, r, x, y, num);
    }
    if (!a[i].r)
      a[i].value = a[a[i].l].value;
    else if (!a[i].l)
      a[i].value = a[a[i].r].value;
    else
      a[i].value = f1(a[a[i].l].value, a[a[i].r].value);
  }
  T query(int i, int l, int r, int x, int y) {
    if (l >= x && r <= y) return a[i].value;
    if (a[i].lazy) lazy(i, l, r);
    int mid = l + r >> 1;
    if (y <= mid || !a[i].r)
      return query(a[i].l, l, mid, x, y);
    else if (x > mid || !a[i].l)
      return query(a[i].r, mid + 1, r, x, y);
    else
      return f1(query(a[i].l, l, mid, x, y), query(a[i].r, mid + 1, r, x, y));
  }

 public:
  segtree(int n, T (*f1)(T, T), T (*f2)(T, T, int)) : n(n), f1(f1), f2(f2) {
    a.resize(2);
  }
  void set(T (*f)(T, T, int)) { f2 = f; }
  void update(int l, int r, T num) { update(1, 1, n, l, r, num); }
  T query(int l, int r) { return query(1, 1, n, l, r); }
};
int a[200005], p[200005];
int main() {
  ios::sync_with_stdio(false);
  int n;
  long long sum = 0, ans;
  cin >> n;
  segtree<long long> s(
      n - 1, [](long long a, long long b) { return min(a, b); },
      [](long long a, long long b, int k) { return a + b; });
  for (int i = 1; i <= n; i++) {
    int x;
    cin >> x;
    p[x] = i;
  }
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    if (i < n) {
      sum += a[i];
      s.update(i, i, sum);
    }
  }
  ans = s.query(1, n - 1);
  for (int i = 1; i <= n; i++) {
    if (p[i] > 1) s.update(1, p[i] - 1, a[p[i]]);
    if (p[i] < n) s.update(p[i], n - 1, -a[p[i]]);
    ans = min(ans, s.query(1, n - 1));
  }
  cout << ans << endl;
  return 0;
}
