Pagini recente » Cod sursa (job #2176237) | Cod sursa (job #2052251) | Cod sursa (job #1824107) | Cod sursa (job #568713) | Cod sursa (job #48465)
Cod sursa(job #48465)
/*
*
*
infoarena 2.0 - Arhiva - NextSeq
*
*
*/
#include<stdio.h>
#include<math.h>
#define INPUT "nextseq.in"
#define OUTPUT "nextseq.out"
FILE *fin=fopen(INPUT, "r"),*fout=fopen(OUTPUT, "w");
long n,m,p,sir[10001],a[10001],b[10001],vec[10001],vec2[10001],pozitie[10001],vec3[10001];
void citire();
void quick(long st, long dr);
void seteazavec();
void calcprimu();
void calculdoilea();
void finalizeaza();
int main()
{
citire();
quick(1,n);
seteazavec();
calcprimu();
calculdoilea();
finalizeaza();
fclose(fin);
fclose(fout);
return 0;
}
void citire()
{
fscanf(fin, "%ld %ld %ld", &n, &m, &p);
for(long i=1;i<=n;++i)
fscanf(fin, "%ld", &sir[i]);
for(long i=1;i<=m;++i)
fscanf(fin, "%ld", &a[i]);
for(long i=1;i<=p;++i)
fscanf(fin, "%ld", &b[i]);
}
void quick(long st, long dr)
{
long l=st,m=dr;
while(l!=m)
{
if((l<m&&sir[l]>sir[m])||(l>m&&sir[l]<sir[m]))
{
sir[l]=sir[l]+sir[m];
sir[m]=sir[l]-sir[m];
sir[l]=sir[l]-sir[m];
l=l+m;
m=l-m;
l=l-m;
if(l<m)
--m;
else
++m;
}
else
if(l<m)
--m;
else
++m;
}
if(l!=st) quick(st,l-1);
if(l!=dr) quick(l+1,dr);
}
void seteazavec()
{
for(long i=1;i<=n;++i)
pozitie[sir[i]]=i;
}
void calcprimu()
{
for(long i=m;i>=1;--i)
vec[i]=pozitie[a[m-i+1]];
}
void calculdoilea()
{
for(long i=p;i>=1;--i)
vec2[i]=pozitie[b[p-i+1]];
}
void finalizeaza()
{
long long numar=0,total=0,max;
max=n;
if(max<m)
max=m;
if(max<p)
max=p;
for(long i=1;i<=max;++i)
vec3[i]=vec2[i]-vec[i];
long long contor=0;
for(long i=max;i>1;--i)
{
if(vec3[i]!=0){
contor=n*vec3[i]+vec3[i-1];
vec3[i-1]=contor;
}
}
fprintf(fout, "%ld\n", vec3[1]-1);
}