Pagini recente » Cod sursa (job #711738) | Cod sursa (job #540896) | Cod sursa (job #2582416) | Cod sursa (job #2978130) | Cod sursa (job #2771429)
#include <cstdio>
#include <set>
using namespace std;
const int NMAX=5005;
int v[NMAX];
set <int> multime;
set <int> :: iterator it;
int main()
{
freopen("secv.in","r",stdin);
freopen("secv.out","w",stdout);
int n,i,lmin=NMAX,st,dr;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&v[i]);
multime.insert(v[i]); //sirul cresc cu toate nr din sirul init o singura data
}
for(st=1;st<=n;st++) //subsecv incepe de la pozitia st
{
it=multime.begin(); //cautam val din multime in ordine cresc
for(dr=st;dr<=n && it!=multime.end();dr++) //subsecventa dintre poz st-dr
{
if(v[dr]==(*it))
it++; //cautam urmatoarea val din multime
}
dr--; //am crescut dr la final cand nu s-a mai indeplinit cond
if(it==multime.end()) //in subsecv st-dr am gasit sirul cautat (multime)
lmin=min(lmin,dr-st+1);
}
if(lmin==NMAX) //nu exista secv care sa contina toate elem mult
printf("-1");
else
printf("%d",lmin);
fclose(stdin);
fclose(stdout);
return 0;
}