Cod sursa(job #548214)

Utilizator toniobFMI - Barbalau Antonio toniob Data 7 martie 2011 10:28:03
Problema Secv Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

ifstream in ("secv.in");
ofstream out ("secv.out");

const int N = 1 << 13;
pair <int, int> x[N];
int v[N], n, val, poz[N], rez = 1 << 30, MAX;

void citire () {
	in >> n;
	for (int i = 1; i <= n; ++i) {
		in >> x[i].first;
		MAX = max (MAX, x[i].first);
		x[i].second = i;
	}
}

void exe () {
	sort (&x[1], &x[n + 1]);
	val = 1;
	v[x[1].second] = 1;
	for (int i = 2; i <= n; ++i) {
		if (x[i].first != x[i - 1]. first) {
			++val;
		}
		v[x[i].second] = val;
	}
	
	for (int i = 1; i <= n; ++i) {
		if (v[i] == 1) {
			poz[1] = i;
		} else {
			poz[v[i]] = poz[v[i] - 1];
			if (v[i] == val && poz[v[i]] != 0) {
				rez = min (rez, i - poz[v[i]] + 1);
			}
		}
	}
}

void afisare () {
	if (rez == (1 << 30)) {
		out << "-1\n";
		return;
	}
	out << rez << '\n';
}

int main () {
	citire ();
	
	exe ();
	
	afisare ();
	
	return 0;
}