Cod sursa(job #865795)

Utilizator ELHoriaHoria Cretescu ELHoria Data 26 ianuarie 2013 23:35:34
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <fstream>
#include <algorithm>
#include <vector>

using namespace std;
  
ifstream cin("secv.in");
ofstream cout("secv.out");

const int NMAX = 5002;
int N;
int v[NMAX];
int lst[NMAX];
vector<int> u;

int main()
{
	cin>>N;
	u.resize(N);
	for(int i = 1;i <= N;i++) {
		cin>>v[i];
		u[i - 1] = v[i];
	}
	sort(u.begin(),u.end());
	vector<int>::iterator it = unique(u.begin(),u.end());
	u.erase(it,u.end());
	int P = (int)u.size();
	int ans = N + 1;
	for(int i = 1;i <= N;i++) {
		v[i] = lower_bound(u.begin(),u.end(),v[i]) - u.begin();
		if(v[i] == 0) {
			lst[v[i]] = i;
		} else {
			if(lst[v[i] - 1] != 0) {
				lst[v[i]] = lst[v[i] - 1];
			}
		}
		if(v[i] == P - 1 && lst[P - 1]) {
			ans = min(ans,i - lst[P - 1] + 1);
		}
	}
	cout<<(ans == N + 1 ? -1 : ans);
    return 0;
}