Pagini recente » Cod sursa (job #1867133) | Cod sursa (job #2497002) | Cod sursa (job #20468) | Cod sursa (job #2811224) | Cod sursa (job #2177648)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("secv.in");
ofstream fout ("secv.out");
#define MAX 5001
#define INF 0x3f3f3f
int n, a[MAX], asort[MAX], b[MAX], ind, lst[MAX], frst[MAX], lmin = INF;
int BinarySearch(int x)
{
int st = 1, dr = ind, mijl;
while (st <= dr)
{
mijl = (st + dr)/2;
if (x == b[mijl])return mijl;
else if (x > b[mijl])st = mijl + 1;
else dr = mijl - 1;
}
return mijl;
}
int main()
{
fin >> n;
for (int i = 1; i <= n; i ++)
{
fin >> a[i];
asort[i] = a[i];
}
sort(asort + 1, asort + 1 + n);
asort[0] = -1;
for (int i = 1; i <= n; i ++)
if (asort[i] != asort[i - 1])
b[++ind] = asort[i];
for (int i = 1; i <= n; i ++)
frst[i] = lst[i] = -1;
for (int i = 1; i <= n; i ++)
{
if (a[i] == b[1])frst[i] = i, lst[1] = i;
else
{
int poz = BinarySearch(a[i]);
if (lst[poz - 1] != -1)
{
lst[poz] = i;
frst[i] = frst[lst[poz - 1]];
if (poz == ind) lmin = min(lmin, i - frst[i] + 1);
}
else frst[i] = -1;
}
}
if (lmin == INF)lmin = -1;
fout << lmin;
return 0;
}