#include <bits/stdc++.h>
#define SEG (1<<18)
using namespace std;

vector<pair<int,int>> v;
bool active[100005],added[100005];
deque<int> cur;
int accnt;

struct segtr
{
    int l[2*SEG],r[2*SEG];
    long long rs[2*SEG];

    void init()
    {
        for(int i=SEG;i<2*SEG;i++)
        {
            rs[i]=0;
            l[i]=i-SEG;
            r[i]=i-SEG;
        }
        for(int i=SEG-1;i>0;i--)
        {
            rs[i]=0;
            l[i]=l[2*i];
            r[i]=r[2*i+1];
        }
    }

    void update(int t,int val)
    {
        for(int i=t+SEG;i>0;i/=2)
        {
            rs[i]+=val;
        }
    }

    long long get(int cur,int lt,int rt)
    {
        if(l[cur]>rt || r[cur]<lt)
        {
            return 0;
        }
        if(l[cur]>=lt && r[cur]<=rt)
        {
            return rs[cur];
        }
        return get(2*cur,lt,rt)+get(2*cur+1,lt,rt);
    }
};

segtr st,st2;

long long Resi(int N, int *A, int *B)
{
    st.init();
    st2.init();
    for(int i=0;i<N;i++)
    {
        v.push_back({A[i],i});
        v.push_back({B[i],i});
    }
    sort(v.begin(),v.end());
    long long res=0;
    int glb=0;
    for(int i=0;i<v.size();i++)
    {
        if(active[v[i].second])
        {
            accnt--;
            active[v[i].second]=false;
            st2.update(B[v[i].second],-1);
        }
        else
        {
            active[v[i].second]=true;
            int tmp=st2.get(1,0,B[v[i].second]);
            if(2*tmp<accnt)
            {
                cur.push_front(v[i].second);
            }
            else
            {
                cur.push_back(v[i].second);
            }
            st2.update(B[v[i].second],1);
            accnt++;
        }
    }
    for(int j=0;j<cur.size();j++)
    {
        res+=st.get(1,0,B[cur[j]]);
        st.update(A[cur[j]],1);
        st.update(B[cur[j]],-1);
    }
    return res;
}