Cod sursa(job #2503679)

Utilizator MateiAruxandeiMateiStefan MateiAruxandei Data 3 decembrie 2019 17:50:46
Problema Secv Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>
#include <set>
#include <map>

#define NMAX 5005
using namespace std;

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

int dp[NMAX], v[NMAX], last[NMAX];
set<int> norm;
map<int, int> mp;

int main()
{
    int n;
    fin >> n;

    for(int i = 1; i <= n; ++i){
        fin >> v[i];
        norm.insert(v[i]);
    }

    int cnt = 0;
    for(auto it: norm)
        mp[it] = (++cnt);

    int minn = n + 1;
    for(int i = 1; i <= n; ++i){
        int pozU = last[mp[v[i]] - 1];
        if(pozU == 0){
            if(mp[v[i]] == 1)
                dp[i] = 1;
            else dp[i] = n + 1;
        }
        else dp[i] = i - pozU + dp[pozU];
        last[mp[v[i]]] = i;
        if(mp[v[i]] == cnt)
            minn = min(minn, dp[i]);
    }
    fout << (minn >= n + 1 ? - 1 : minn) << '\n';
    return 0;
}