Cod sursa(job #990464)

Utilizator cont_de_testeCont Teste cont_de_teste Data 28 august 2013 13:10:47
Problema Secv Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <algorithm>
#include <iostream>
#include <fstream>
using namespace std;

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

const int MAX_N = 5010;
const int oo = 0x3f3f3f3f;

int n, m, mx;
int sol = oo;

int a[MAX_N], v[MAX_N];
int last[MAX_N];

inline int binsrc(int wanted) {
	int i = 0, cnt = 1 << 12;
	for (; cnt; cnt >>= 1)
		if (i + cnt <= m && a[i + cnt] <= wanted)
			i += cnt;
	return i;
}

int main() {
	fin >> n;
	for (int i = 1; i <= n; ++i)
		fin >> a[i], v[i] = a[i];
	
	sort(a + 1, a + n + 1);
	
	for (int i = 1; i <= n; ) {
		int j = i;
		while (a[i] == a[j])
			++j;
		--j;
		a[++m] = a[j];
		i = ++j;
	}
	for (int i = 1; i <= n; ++i)
		v[i] = binsrc(v[i]), mx = max(mx, v[i]);
	
	
	for (int i = 1; i <= n; ++i) {
		if (v[i] == 1)
			last[1] = i;
		else {
			if (last[v[i] - 1]) {
				last[v[i]] = last[v[i] - 1];
			}
		}
		if (v[i] == mx && last[v[i]])
			sol = min(sol, i - last[v[i]] + 1);
	}
	
	fout << sol << '\n';
	
	fin.close();
	fout.close();
}