Cod sursa(job #455912)

Utilizator deneoAdrian Craciun deneo Data 14 mai 2010 15:50:38
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<vector>
#include<fstream.h>
#include<algorithm>
using namespace std;
vector<long> s;
long n;
int next(int poz)
{
	while(s[poz]==s[poz+1] && poz<n-1)
		poz++;
	poz++;
	if(s[poz]==s[poz-1] || poz>n-1)
		return -1;
	return poz;
} // se retine poz intr-un aux apoi verifcam daca e la sf sau merge next
int main()
{
	long i, j, v[5001], poz=0, si=0, p, da, sol=0, func=1;
	ifstream f("secv.in");
	f>>n;
	for(i=1; i<=n; ++i)
	{
		f>>v[i];
		s.push_back(v[i]);
	}
	sort(s.begin(), s.end());
	ofstream g("secv.out");
	while(func)
	{
		func=0;
		poz=0;
		for(j=si+1; j<=n; ++j)
				if(v[j]==s[poz])
				{
					si=j;
					p=j;
					func=1;
					break;
				}
		while(1)
		{
			da=1;
			poz=next(poz);
			if(poz==-1)
			{
				if(sol==-1 || p-si+1<sol || sol==0)
					sol=p-si+1;
				break;
			}
			for(i=p+1; i<=n && da; ++i)
				if(v[i]==s[poz])
				{
					da=0; 
					p=i;
				}
			if(da==1)
			{
				if(sol==0)
					sol=-1;
				break;
			}
		}
	}
	g<<sol;	
	g.close();
	return 0;
}