Cod sursa(job #1847567)

Utilizator AndreosAndrei Otetea Andreos Data 14 ianuarie 2017 18:52:54
Problema Secv Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <cstdio>
#include <stack>
#include <algorithm>
#include <vector>
using namespace std;
const int NMAX=5000;
struct ELEM
{
	int val,poz;
};
int v[NMAX+5];
ELEM s[NMAX+5];
vector <int> ones;
bool cmp(ELEM a,ELEM b)
{
	if(a.val==b.val)
		return a.poz<b.poz;
	return a.val<b.val;
}
int main()
{
    freopen("secv.in","r",stdin);
    freopen("secv.out","w",stdout);
    int i,n,x;
    scanf("%d",&n);
    for(i=1;i<=n;++i)
    {
    	scanf("%d",v+i);
    	s[i].val=v[i];
    	s[i].poz=i;
    }
    sort(s+1,s+n+1,cmp);
    int t=-1,tpoz=0;
    for(i=1;i<=n;++i)
    {
		if(t==s[i].val)
			v[s[i].poz]=tpoz;
    	else
		{
			tpoz++;
			t=s[i].val;
			v[s[i].poz]=tpoz;
		}
		if(tpoz==1)
			ones.push_back(s[i].poz);
    }
    int sol=n+1,max=tpoz+1;
    for(int l=0;l<ones.size();++l)
    {
    	tpoz=2;
    	for(i=ones[l]+1;i<=n;++i)
		{
			if(v[i]==tpoz)
				tpoz++;
			if(tpoz==max)
			{
				if(sol>i-ones[l]+1)
					sol=i-ones[l]+1;
				break;
			}
		}
    }
    if(sol<=n)
		printf("%d\n",sol);
	else
		printf("-1\n");
    return 0;
}