Cod sursa(job #1289671)

Utilizator stefanzzzStefan Popa stefanzzz Data 10 decembrie 2014 09:16:29
Problema Secv Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
#include <set>
#include <map>
#define MAXN 5005
#define INF 2000000000
using namespace std;
ifstream f("secv.in");
ofstream g("secv.out");

int n, v[MAXN], start_poz[MAXN], largest_nr, sol = INF, x;
set<int> v_cresc;
set<int>::iterator it1, it2;
map<int, int> last, prev_nr;

int main()
{
    int i;

    f >> n;
    for(i = 1; i <= n; i++){
        f >> v[i];
        v_cresc.insert(v[i]);
        last[v[i]] = 0;
    }

    it1 = it2 = v_cresc.begin(); it2++;
    prev_nr[*it1] = -1;
    for(; it2 != v_cresc.end(); it1++, it2++)
        prev_nr[*it2] = *it1;
    largest_nr = *it1;

    for(i = 1; i <= n; i++){
        x = v[i];
        last[x] = i;
        if(prev_nr[x] == -1){
            start_poz[i] = i;
            continue;
        }

        x = prev_nr[x];
        if(last[x])
            start_poz[i] = start_poz[last[x]];
        if(v[i] == largest_nr && start_poz[i] && i - start_poz[i] + 1 < sol)
            sol = i - start_poz[i] + 1;
    }

    if(sol == INF){
        g << "-1\n";
        return 0;
    }

    g << sol << '\n';

    f.close();
    g.close();
    return 0;
}