Cod sursa(job #1943533)

Utilizator ifrimencoAlexandru Ifrimenco ifrimenco Data 28 martie 2017 17:29:59
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>
#include <iostream>
#include <set>
#include <climits>
#define nmax 5002

using namespace std;

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

set <int> q;
int v[nmax], s[nmax];
int dr[nmax];

int main()
{
    int n, i;
    int mi = INT_MAX, poz;
    f >> n;
    for (i = 1; i <= n; ++i) {
        f >> v[i];
        if (v[i] < mi) mi = v[i], poz = i;
        q.insert(v[i]);
    }
    if (q.size() == 1) {g << 1; return 0; }

    for (i = 1; i <= n; ++i)
        v[i] = distance(q.begin(), q.find(v[i])) + 1;
    mi = INT_MAX;

    for (i = poz; i <= n; ++i) {
        if (v[i] == 1) s[v[i]] = i, dr[i] = i;
            else if (s[v[i] - 1]){
                s[v[i]] = i;
                dr[i] = dr[s[v[i] - 1]];
                if (v[i] == q.size()&& i - dr[i] + 1 < mi) mi = i - dr[i] + 1;

            }
    }

    if (mi == INT_MAX) {g << -1; return 0;}
    g << mi;

    return 0;
}