#include<bits/stdc++.h>
#define maxn 100005
#define pii pair<int,int>
#define in second
#define out first
using namespace std;

int tree[4*maxn]={0};
void update(int v,int l,int r,int lt,int rt,int x)/*+x u [lt,rt]*/
{
	if(l>r || lt>rt || l>rt || lt>r)return;

	if(lt<=l && r<=rt)
	{
		tree[v]+=x;
		return;
	}

	int mid=(l+r)/2;
	update(2*v,l,mid,lt,rt,x);
	update(2*v+1,mid+1,r,lt,rt,x);
}
int query(int v,int l,int r,int ind)// koliko ima >ind
{
	if(l>ind || ind>r || l>r)return 0;

	int mid=(l+r)/2;

	if(mid>=ind)return tree[v]+query(2*v,l,mid,ind);
	return tree[v]+query(2*v+1,mid+1,r,ind);
}


pii p[maxn];
vector<pii> dog;
long long Resi(int n, int *a, int *b)
{


	for(int i=0;i<n;i++)
	{
		p[i].in=a[i];
		p[i].out=b[i];
	}

	sort(p,p+n);

	for(int i=0;i<n;i++)
	{
		dog.push_back({p[i].in,i+1});
		dog.push_back({p[i].out,-i-1});
	}

	sort(dog.begin(),dog.end());

	long long res=0LL;
	int tre=0;
	for(int i=0;i<2*n;i++)
	{
		int br=dog[i].second;
		if(br<0)
		{
			br=-br;
			update(1,0,n-1,0,br-1,-1);
		}
		else
		{
			int veci=query(1,0,n-1,br);
			int manji=tre-veci;

			res+=min(veci,manji);
			tre++;
			update(1,0,n-1,0,br-1,1);
		}
	}

	return res;
}