Pagini recente » Cod sursa (job #598637) | Cod sursa (job #2138586) | Cod sursa (job #1851984) | Cod sursa (job #1485820) | Cod sursa (job #65316)
Cod sursa(job #65316)
#include <cstdio>
FILE *in = fopen("panouri.in","r"), *out = fopen("panouri.out","w");
int a[200000];
int b[20000];
int t[20001];
int fr[20001];
int n, m;
void read()
{
fscanf(in, "%d %d", &n, &m);
for ( int i = 0; i < n; ++i )
fscanf(in, "%d", &a[i]);
for ( int i = 0; i < m; ++i )
{
fscanf(in, "%d", &b[i]);
t[b[i]] = 1;
}
}
int main()
{
read();
for ( int i = 0; i < n; ++i )
printf("%d ", a[i]);
printf("\n");
for ( int i = 0; i < m; ++i )
printf("%d ", b[i]);
printf("\n");
int p = 0, u = 0, min = 1000000000;
int cnt = 0; // cate elemente din a[p..u] apartin multimii b
while ( p <= u && u < n )
{
if ( t[a[u]] == 1 && fr[a[u]] == 0 )
++cnt, ++fr[a[u]];
if ( cnt == m )
{
--fr[a[p]];
++p, --cnt;
if ( u-p+1 < min )
min = u-p;
while ( !t[a[p]] )
++p;
}
++u;
}
fprintf(stdout, "%d\n", min);
return 0;
}
//1 2 3 5 3 1
//5 1