Cod sursa(job #877497)

Utilizator mihaiSimuSimu Mihai mihaiSimu Data 12 februarie 2013 21:51:19
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <stdio.h>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;

int a[5005];
set<int> aSet;
vector<int> pozVector;
int start[5005];
int n;

int min(int a,int b){return a<b?a:b;}
int main(){
	int x;
	freopen("secv.in","r",stdin);
	freopen("secv.out","w",stdout);
	scanf("%d",&n);
	int myMin=n+1;
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		aSet.insert(a[i]);
	}	
	for(set<int>::iterator it = aSet.begin();it!=aSet.end();it++){
		pozVector.push_back(*it);
	}
	
	for(int i=1;i<=n;i++){
		start[i]=-1;
		int poz = lower_bound(pozVector.begin(),pozVector.end(),a[i])-pozVector.begin();
		if(poz==0) start[i]=i;
		else{
			for(int j=i-1;j>=1;j--){
				if(a[j]==pozVector[poz-1]){
					start[i]=start[j];
					break;
				}
			}
		}
		if(start[i]!=-1 && a[i]==pozVector[pozVector.size()-1])
				myMin=min(myMin,i-start[i]+1);
	}
	if(myMin!=n+1)
		printf("%d",myMin);
		else
		printf("-1");
	return 0;
}