#include <bits/stdc++.h>
#define MAX_N 100005
using namespace std;
int* A;
int* B;
int red[MAX_N];
int op[2*MAX_N];
int b[8*MAX_N];

void update(int pos, int val, int v, int l, int r){
    if(l+1==r){
        b[v]=val;
        return;
    }
    int mid=(l+r)/2;
    if(pos<mid)update(pos, val, 2*v+1, l, mid);
    else update(pos, val, 2*v+2, mid, r);
    b[v]=b[2*v+1]+b[2*v+2];
}

int query(int v, int l, int r, int ql, int qr){
    if(ql>=r || qr<=l)return 0;
    if(ql<=l && r<=qr)return b[v];
    int mid=(l+r)/2;
    return query(2*v+1, l, mid, ql, qr)+query(2*v+2, mid, r, ql, qr);
}



long long Resi(int N, int *a, int *b) {
    A=a;
    B=b;

    long long T=0;
    for(int i=0; i<N; ++i){
        op[A[i]]=i+1;
        op[B[i]]=-1*(i+1);
    }
    int l=0;
    for(int i=0; i<2*N; ++i){
        //dodajemo ili skidamo op[i] tu kutiju po redu
        //dop=broj B-ova koji su sad u nizu 0
        if(op[i]>0){
            //imamo doprinos broj trenutnih clanova koji su manji od B[i]

            int dop=query(0, 0, 2*N, 0, B[op[i]-1]);
            update(B[op[i]-1], 1, 0, 0, 2*N);
            if(l>2*dop)T+=dop;
            else T+=l-dop;
            //printf("dop[%d]=%d, T=%d\n", i, dop, T);
            l++;
        }
        else{
            update(B[-1*op[i]-1], 0, 0, 0, 2*N);
            l--;
        }
    }
	return T;
}