Cod sursa(job #294356)

Utilizator Omega91Nicodei Eduard Omega91 Data 2 aprilie 2009 14:38:17
Problema Secv Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <cstdio>
#include <algorithm>
const int NMAX = 5001;

int main()
{
	int N, i, unic[NMAX], sir[NMAX], sir2[NMAX], k = 0, sz, cmp;
	int left, right;
	freopen("secv.in", "r", stdin);
	freopen("secv.out", "w", stdout);
	
	scanf("%d", &N);
	for (i = 0; i != N; ++i) {
		scanf("%d ", sir + i);
		sir2[i] = sir[i];
	}
	std::sort(sir2, sir2 + N);
	
	k = 0; cmp = sir2[0]; unic[k++] = cmp;
	for (i = 1; i != N; ++i)
		if (sir2[i] != cmp) {
			cmp = sir2[i];
			unic[k++] = cmp;
		}
	sz = k;
	for (i = k = 0; i != N; ++i)
		if (sir[i] == unic[k]) {
			++k;
			if (k == 1) left = i;
			right = i;
		}
	if (k != sz) { printf("-1\n"); return 0; }
	for (i = right, --k; ; --i) {
		if (sir[i] == unic[k]) --k;
		if (k < 0 || i <= left) break;
	}
	left = i;
	printf("%d\n", right - left + 1);
		
	return 0;
}