Cod sursa(job #1482906)

Utilizator tiby10Tibi P tiby10 Data 8 septembrie 2015 12:10:39
Problema Secv Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<bits/stdc++.h>
using namespace std;
ifstream fin("secv.in");
ofstream fout("secv.out");
#define MAXN 5005

int n, howMany;
bitset<MAXN> used, aux;
vector<int> V, ans;

int check(int index){
    aux.reset();
    int cnt=1, i, indexAns=ans[index]-1, dist=1;
    aux[V[index]]=1;
    for(i=index+1;i<=n && indexAns;++i, ++dist)
        if(ans[i]==indexAns)
            if(!aux[V[i]]){
                ++cnt, --indexAns;
                aux[V[i]]=1;
            }
    if(cnt==howMany)
        return dist;
    return 0;
}

int main(){
    fin>>n;
    V.resize(n+1, 0);
    ans.resize(n+1, 0);
    int i, j, best, miN=(1<<30);
    for(i=1;i<=n;++i){
        fin>>V[i];
        if(!used[V[i]])
            ++howMany;
        used[V[i]]=1;
    }
    ans[n]=1;
    for(i=n-1;i>=1;--i){
        best=0;
        for(j=i+1;j<=n;++j)
            if(V[i]<V[j])
                best=max(best, ans[j]);
        ans[i]=best+1;
    }
    for(i=1;i<=n;++i)
        if(ans[i]>=howMany){
            j=check(i);
            if(j) miN=min(miN, j);
        }
    fout<<miN;
    return 0;
}