Ma poate ajuta si pe mine cineva? Iau 80p cu TLE pe testele 8 si 10, chiar daca am complexitatea O(N+T).
cod:
#include<fstream>
#include<iostream>
using namespace std;
int a[ 200005 ],f[ 20005 ],ff[ 20005 ],f_sol[ 20005 ];
ifstream in ("panouri.in");
ofstream out("panouri.out");
int main()
{
int n,i,T,x,nr1=0,p,u,min=2000000;
in>>n>>T;
for(i=1;i<=n;i++)
{in>>a[ i ];f_sol [ a [ i ] ]++;}
for(i=1;i<=T;i++)
{
in>>x;
ff [ x ] ++;
}
p=u=1;
if(ff[a[1]]) nr1=1;
else nr1=0;
f[a[1]]++;
while(u<=n)
{
while(p<=u && nr1==T)
{
if(u-p<min) min=u-p;
f[a[p]]--;
if(ff[a[p]] && f[a[p]]==0) nr1--;
p++;
}
while( u <= n && nr1 != T )
{
u++;
f[ a [ u ] ]++;
if(ff [ a [ u ] ] && f [ a [ u ] ] == 1)
nr1++;
}
}
if(min!=2000000)
out<<min<<endl;
else
out<<"-1"<<endl;
return 0;
}
Daca un admin considera ca nu e bine ca am postat codul, sa il stearga
