#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
pair<ll,ll> p[500000];
ll bit[1000000];
ll n;

/*
3
1 5
2 7
3 6

4
0 3
1 7
2 4
5 6


*/


void update(ll x)
{
    while(x<=n*4){
        bit[x]++;
        x+=x&(-x);
        //cout << x<<endl;
    }
}

void update1(ll x)
{
    while(x<=n*4){
        bit[x]--;
        x+=x&(-x);
        //cout << x<<endl;
    }
}

ll get(ll x)
{
    ll temp=0;
    while(x>0){
        temp+=bit[x];
        x-=x&(-x);
        //cout << "get"<<endl;
    }
    return temp;
}


long long Resi(int N, int *A, int *B)
{
    ll vrati=0;
    if(N==1){
        return 0;
    }
    else if(N==2){
        return 0;
    }

    for(int i=0;i<N;i++){
        p[i]={A[i]+1,B[i]+1};
        p[i+N]={B[i]+1,B[i]+1};

    }
    sort(p,p+N+N);


    if(N<=20){
        deque<ll> dq,dq1;
        map<ll,ll> m;
        vrati=INT_MAX;
        for(int mask=0;mask<(1LL<<N);mask++){
            dq.clear();
            dq1.clear();
            ll poredu=0;
            ll temp=0;
            for(int i=0;i<N*2;i++){
                if(p[i].second==p[i].first){
                    ll obrisan=0;
                    for(int j=0;j<dq.size();j++){
                        if(dq[j]==p[i].second){
                            temp+=j;
                            obrisan=j;
                            break;
                        }
                    }
                    dq1.clear();
                    for(int j=0;j<dq.size();j++){
                        if(j==obrisan)continue;
                        dq1.pb(dq[j]);
                    }
                    dq=dq1;
                }
                else{
                    if(mask & (1LL<<poredu)){
                        dq.push_back(p[i].second);
                    }
                    else{
                        dq.push_front(p[i].second);
                    }
                    poredu++;
                }
            }
            //cout << temp <<endl;
            vrati=min(vrati,temp);
        }
        return vrati;
    }

    n=N;
    deque<ll> dq;
    //dq.push_back(p[0].second);
    //update(p[0].second);
    //cout << "xxx";
    ll bili=0;

    for(int i=0;i<2*n;i++){
        ll temp=get(p[i].second);
        if(p[i].first!=p[i].second){
            if(bili==0 || bili==1){
                update(p[i].second);
            }
            else if(bili-temp<=temp){
                update(p[i].second);
                vrati+=bili-temp;
                //dq.pb(p[i].second);
            }
            else{
                //dq.push_front(p[i].second);
                vrati+=bili;
                update(p[i].second);
            }
            bili++;
        }
        else{
            update1(p[i].second);
            bili--;
        }
        //cout << i+1 << ' ' << vrati << endl;
    }

/*
    for(int i=1;i<N;i++){
            if(dq.size()-temp<=temp){
                update(p[i].second);
                vrati+=dq.size()-temp;
                dq.pb(p[i].second);
            }
            else{
                dq.push_front(p[i].second);
                vrati+=temp;
                update(p[i].second);
            }
    }*/

    //for(auto i:dq)cout << i << ' ';
    return vrati;
}