Cod sursa(job #1327060)

Utilizator assa98Andrei Stanciu assa98 Data 26 ianuarie 2015 12:41:27
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;

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

const int MAX_N = 5010;

int v[MAX_N];
int d[MAX_N];
int c[MAX_N];
vector<int> norm;

int main() {
    int n;
    fin >> n;
    for(int i = 1; i <= n; i++) {
        fin >> v[i];
        norm.push_back(v[i]);
    }
    sort(norm.begin(), norm.end());
    norm.erase(unique(norm.begin(), norm.end()), norm.end());
    
    for(int i =  1; i <= n; i++) {
        v[i] = lower_bound(norm.begin(), norm.end(), v[i]) - norm.begin();
    }
    
    int ans = n + 1;

    if(norm.size() == 1) {
        fout << 1;
        return 0;
    }

    for(int i = 1; i <= n; i++) {
        if(v[i] == 0) {
            d[i] = i;
            c[v[i]] = i;
        }
        else if(c[v[i] - 1]) {
            d[i] = d[c[v[i] - 1]];
            c[v[i]] = i;
            if(v[i] == (int)norm.size() - 1) {
                ans = min(ans, i - d[i] + 1);
            }
        }
    }

    if(ans == n + 1) {
        fout << "-1\n";
    }
    else {
        fout << ans << '\n';
    }
    
    return 0;
}