Cod sursa(job #2008605)

Utilizator GrandmasterSoucup Bogdan Grandmaster Data 6 august 2017 23:38:09
Problema Secv Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <fstream>
#include <math.h>
#include <vector>
#include <set>
#include <algorithm>
#include <cstring>
//#include <unordered_map>
#include <iomanip>
#include <time.h>
#include <stdio.h>
#include <bitset>
#include <map>
#include <ctime>
#define MAX 500000000000
//#include <iostream>
//#include <windows.h>
#include <deque>
//#include "PEZai.h"
//#include <Tlhelp32.h>
using namespace std;
//ifstream cin("jocul.in");
//ofstream cout("jocul.out");
ifstream cin("secv.in");
ofstream cout("secv.out");
int x[5004], dp[5004], sor[5004], n, c, mex = 1<<30;
map<int, int> mat;
int main()
{
    cin >> n;
    for(int i = 0; i < n; i++)
    {
        cin >> x[i];
        if(mat[x[i]] == 0)
            sor[c++] = x[i];
        mat[x[i]] = 1;
    }
    sort(sor, sor + c);
    for(int k = 0; k < c; k++)
        for(int i = 0; i < n; i++)
            if(k == 0){
                if(x[i] == sor[0])
                    dp[i] = 1;
            }
            else{
                for(int j = i - 1; j >= 0; j--)
                    if(x[i] > x[j] && x[j] == sor[k - 1] && dp[j] != 0 && x[i] == sor[k]){
                        dp[i] = dp[j] + (i - j);
                    break;
                }
            }
    for(int i = 0; i < n; i++)
        if(x[i] == sor[c - 1])
            mex = min(mex, dp[i]);
    if(mex == 0 || mex == 1<<30)
    {
        cout << -1;
        return 0;
    }
    cout << mex;
}