#include #define endl "\n" using namespace std; #define ll long long #define ld long double #define rep(i,n) for(int i = 0; i < (int)(n); i++) #define repo(i,n) for(int i = 1; i < (int)(n); i++) #define pb push_back #define mp make_pair #define np next_permutation #define fi first #define se second #define all(x) (x).begin(),(x).end() #define uniq(v) v.erase(unique(v.begin(),v.end()),v.end()) #define lb(v,x) (lower_bound(v.begin(),v.end(),x)-v.begin()) #define ub(v,x) (upper_bound(v.begin(),v.end(),x)-v.begin()) using Pair = pair>; #define pq priority_queue, greater> const ll mod=1000000007; //const ll mod=998244353; const ld pi=acos(-1.0); const ll INF = 1LL<<61; templatebool chmax(T &a, const T &b) { if (abool chmin(T &a, const T &b) { if (b class BIT{ public: int N; vector data; BIT(T _N):N(_N){ data.assign(N+1, 0); }; // a is 1-indexed void add(int a, T w){ for(int x = a; x <= N; x += x & -x) data[x] += w; } // 1-indexed sum of prefix [0, a] T sum(int a){ T res = 0; for(int x = a; x > 0; x -= x & -x) res += data[x]; return res; } // 1-indexed sum of range [l, r] T sum(int l, int r){return sum(r) - sum(l-1);} // 0-indexed add void add0(int a, T w){add(a + 1, w);} // 0-indexed sum T sum0(int a){return sum(a + 1);} // 0-indexed sum of range T sum0(int l, int r){return sum0(r) - sum0(l-1);} //1-indexed でv1+v2+...+vx >= w となる最小のx T blb(T w) { if(w <= 0) return 0; int res = 0; int i=1; while(i*2 <= N) {i *= 2;} //i は N以下の最大の2べき for(int k = i; k > 0; k /= 2) { if(res + k <= N && data[res + k] < w) { w -= data[res + k]; res += k; } } return res+1; } /* debug */ void print() { rep(i,N) cout << sum0(i,i) << ","; cout << endl; } }; ll tento(vectorv){ int n=v.size(); //v2に座標圧縮 vector v2(n); vector> vp; rep(i,n){ vp.pb({v[i], i}); } sort(all(vp)); rep(i,n) v2[vp[i].se]=i; BIT bit(n); ll rtn = 0; rep(i,n){ //rtn += bit.sum0(v2[i]) でi>n; vector p(n); vector q(n); vector r(n); vector s(n); rep(i,n) { cin>>p[i]; q[p[i]-1]=i; } rep(i,n){ cin>>r[i]; s[i]=q[r[i]-1]; } cout << tento(s) << endl; }