/*
TASK:round
LANG:C++
*/
# include <stdio.h>
# include <string.h>
# define MAXN 2048
# define min(a,b) (((a)<(b))? (a):(b))

int n;
int data[MAXN][MAXN];
short a[MAXN],b[MAXN];
short tree[MAXN*4];
void readf() {
//	freopen("round.in","r",stdin);
    scanf("%d",&n);
    for ( int i=0 ; i<n ; i++ )
    	scanf("%d",&a[i]);
    for ( int i=0 ; i<n ; i++ )
    	scanf("%d",&b[i]);
    memset(data,-1,sizeof(data));
}
void push(int a) {
	int l,r,mid,p;
    p=0, l=1, r=2*n, p=0;
    while ( l<r ) {
    	tree[p]++;
        mid = (l+r)/2;
        if ( a<=mid ) {
        	p=2*p+1;
            r = mid;
        } else {
        	p=2*p+2;
            l = mid+1;
        }
    }
    tree[p]++;
}
void pop(int a) {
	int l,r,mid,p;
    p=0, l=1, r=2*n, p=0;
    while ( l<r ) {
    	tree[p]--;
        mid = (l+r)/2;
        if ( a<=mid ) {
        	p=2*p+1;
            r = mid;
        } else {
        	p=2*p+2;
            l = mid+1;
        }
    }
    tree[p]--;
}
int f(int a) {
    int l,r,mid,p,re=0;
    p=0, l=1, r=2*n, p=0;
    while ( l<r ) {
        mid = (l+r)/2;
        if ( a<=mid ) {
        	p=2*p+1;
            r = mid;
        } else {
        	p=2*p+2;
            re+=tree[p-1];
            l = mid+1;
        }
    }
	return re;
}
int cal(int p, int q) {
	if ( data[p][q]==-1 ) {
    	if ( p<n ) {
        	int m,k;
            k = f(a[p]);
            m = min(k,p+q-k);
        	push(a[p]);
            data[p][q] = m+cal(p+1,q);
            pop(a[p]);
        }
        if ( q<n ) {
        	int m,k,l;
            k = f(b[q]);
            l = f(n+1);
            if ( b[q]<= n ) {
            	m = min(l-k,p+q-l+k);
            } else {
            	m = min(k-l,p+q-k+l);
            }
            push(b[q]);
            m+=cal(p,q+1);
            pop(b[q]);
            if ( data[p][q]==-1 || data[p][q]>m )
            	data[p][q] = m;
        }
        if ( data[p][q]==-1 ) data[p][q] = 0;
    }
    return data[p][q];
}
int main() {
	readf();
    printf("%d\n",cal(0,0));
    return 0;
}
