/*
TASK:round
LANG:C
*/
#include <stdio.h>
#include <string.h>
#define inf 1000000000

 long a[2048],b[2048],x[2048][2048],n,r;
 long bin[4192];

 long min (long a,long b)
  {
   if (a<=b)
    return a;
     else
      return b;
  }

 void JG (long z,long f)
  {
   long i,j,m;
   r=0;
   if (z==0)
    return;
   i=1;
   j=2*n;
   while (1)
    {
     m=(i+j)/2;
     if (m==z)
      break;
     if (m<z)
      {
       i=m+1;
       if (f==0)
        r+=bin[m];
      }
       else
        {
         j=m-1;
         if (f==1)
          bin[m]++;
           else
            if (f==2)
             bin[m]--;
        }
    }
   if (f==0)
    r+=bin[m];
   if (f==1)
    bin[m]++;
     else
      if (f==2)
       bin[m]--;
  }

 long get (long v,long u,long f)
  {
   long i,s,t;
   s=v+u;
   t=0;
   if (f==0)
    {
     if (a[v]>n)
      {
       JG(a[v],0);
       t=s-r;
      }
       else
        {
         JG(a[v]-1,0);
         t=r;
        }
    }
     else
      {
       if (b[u]>n)
        {
         JG(b[u]-1,0);
         t=r;
         JG(n,0);
         t-=r;
        }
         else
          {
           JG(n,0);
           t=r;
           JG(b[u],0);
           t-=r;
          }
      }      
   return min(s-t-1,t);
  }

 int main  ()
  {
   long i,j;
   scanf("%ld",&n);
   for (i=1;i<=n;i++)
    scanf("%ld",&a[i]);
   for (i=1;i<=n;i++)
    scanf("%ld",&b[i]);
   for (i=1;i<=n;i++)
    for (j=1;j<=n;j++)
     x[i][j]=inf;     
   x[0][1]=0;
   x[1][0]=0;
   for (i=1;i<=n;i++)
    {
     JG(a[i],1);
     for (j=1;j<=n;j++)
      {
       JG(b[j],1);
       x[i][j]=min(x[i-1][j]+get(i,j,0),x[i][j-1]+get(i,j,1));
      }
     for (j=1;j<=n;j++)
      JG(b[j],2);
    }
   printf("%ld\n",x[n][n]);
   return 0;
  }
  
