Cod sursa(job #212043)

Utilizator taloibogdanTaloi Bogdan Cristian taloibogdan Data 4 octombrie 2008 10:53:55
Problema NextSeq Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<stdio.h>
#include<stdio.h>
long a[10001],h[10001],A[10001],B[10001],n,m,p,i,j,t,q,f,l;
long partit(long st, long dr)
{long i,j,m,piv,aa;
 m=(st+dr)/2;
 piv=a[m];
 i=st-1;
 j=dr+1;
 while(1)
  {do{++i;} while(a[i]<piv);
   do{--j;} while(a[j]>piv);
   if(i<j)
     {aa=a[i];a[i]=a[j];a[j]=aa;}
      else
     return j;
  }
}
void quicks(long st,long dr)
{long p;
 if (st<dr)
   {p=partit(st,dr);
    quicks(st,p);
    quicks(p+1,dr);
   }
}
int main()
{
 freopen("nextseq.in","r",stdin);
 freopen("nextseq.out","w",stdout);
 scanf("%ld%ld%ld",&n,&m,&p);
 for(i=1;i<=n;++i)
    scanf("%ld",&a[i]);
 quicks(1,n);
 for(i=1;i<=n;++i)
    if(h[a[i]])++t;
     else h[a[i]]=i-t;
 for(i=1;i<=m;++i)
    {scanf("%ld",&q);A[i+p-m]=h[q];}
 for(i=1;i<=p;++i)
    {scanf("%ld",&q);B[i]=h[q];}
 f=1;
 while(f)
  {for(i=p;A[i]==n;--i)
      A[i]=1;
   A[i]+=1;
   ++l;
   for(i=1;A[i]==B[i];++i);
   if(A[i]>B[i])f=0;
  }
 printf("%ld\n",l-2);
 return 0;
}