Cod sursa(job #3130142)

Utilizator divadddDavid Curca divaddd Data 16 mai 2023 22:27:35
Problema Secv Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 5002;
vector<int> pos[NMAX];
int n,a[NMAX],dp[NMAX];
/// dp[i] = lungimea minima a unei secvente care foloseste primele norm[a[i]] elemnte
map<int, int> mp;

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

int main()
{
    fin >> n;
    for(int i = 1; i <= n; i++){
        fin >> a[i];
        mp[a[i]] = i;
    }
    int cnt = 0;
    for(auto &it: mp){
        it.second = ++cnt;
    }
    for(int i = 1; i <= n; i++){
        a[i] = mp[a[i]];
    }
    for(int i = 1; i <= n; i++){
        if(a[i] == 1){
            pos[1].push_back(i);
        }else{
            if(pos[a[i]-1].size() > 0){
                int loc = pos[a[i]-1].back();
                dp[i] = dp[loc]+(i-loc);
                pos[a[i]].push_back(i);
            }
        }
    }
    int ans = INT_MAX;
    for(int i = 1; i <= n; i++){
        if(a[i] == cnt && dp[i] > 0){
            ans = min(ans, dp[i]+1);
        }
    }
    fout << ans;
    return 0;
}