Pagini recente » Cod sursa (job #1699624) | Cod sursa (job #355035) | Cod sursa (job #1165927) | Cod sursa (job #1528868) | Cod sursa (job #1327232)
#include <cstdio>
#include <algorithm>
using namespace std;
FILE *fin=freopen("nextseq.in","r",stdin);
FILE *fout=freopen("nextseq.out","w",stdout);
int n, m, p;
int Pos[10003], V[10003], A[10003], B[10003];
void Read()
{
int i, x;
scanf("%d %d %d", &n, &m, &p);
for(i = 1; i <= n ; ++i)
scanf("%d", &V[i]);
sort(V + 1, V + n + 1);
for(i = 1; i <= n ; ++i)
Pos[V[i]] = i;
A[0] = m;
for(i = 1; i <= m ; ++i)
{
scanf("%d", &x);
A[i] = Pos[x];
}
B[0] = p;
for(i = 1; i <= p ; ++i)
{
scanf("%d", &x);
B[i] = Pos[x];
}
}
inline bool egal()
{
if( A[0] < B[0] )
return 0;
for(int i = 1; i <= A[0]; ++i)
if( A[i] < B[i] )
return 0;
return 1;
}
inline void Raise()
{
int i;
for(i = 1; i <= A[0]; ++i)
{
if( A[i] < n )
{
++A[i];
return;
}
else
{
A[i] = 1;
++A[i + 1];
if(i == A[0])
++A[0];
}
}
}
void Solve()
{
int i, cnt = -1;
reverse(A + 1, A + A[0] + 1);
reverse(B + 1, B + B[0] + 1);
while(!egal())
{
++cnt;
Raise();
}
printf("%d", cnt);
}
int main()
{
Read();
Solve();
return 0;
}