Cod sursa(job #1854164)

Utilizator mihai2003LLL LLL mihai2003 Data 22 ianuarie 2017 14:25:17
Problema Secv Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int v[5005],v2[5005],vc[5005],cont[5005],bin[5005],n,j,ordmin[5005];
ifstream in("secv.in");
ofstream out("secv.out");
int bs(int k){
    int l,r,med=1;
    l=0;
    r=j;
    while(l<=r && vc[med]!=k){
        med=(r+l)/2;
        if(vc[med]<k)
            l=med+1;
        else
            if(vc[med]>k)
                r=med-1;
    }
    if(vc[med]==k)
        return med;
    else
        return -1;
}
int main()
{
    int aux,lc=0,u=1,lmin=INT_MAX,nrd=0;
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>v[i],v2[i]=v[i];
    sort(v2+1,v2+n+1);
    for(int i=1;i<=n;i++)
        if(v2[i]>v2[i-1])
            vc[j++]=v2[i];
    for(int i=1;i<=n;i++){
        int poz;
        bin[i]=bs(v[i]);
    }
    for(int i=1;i<=n;i++){
        int poz;
        poz=bin[i];
        cont[poz]++;
        if(cont[poz]==1)
            nrd++;
        if(ordmin[poz]==0)
            ordmin[poz]=i;
        lc++;
        if(nrd==j){
            for(int k=1;k<=j;k++)
                if(ordmin[k]<ordmin[k-1]){
                    if(v[u]==k)
                        cont[bin[u++]]--,lc--;
                }
            if(lc<lmin)
                lmin=lc;
        }
    }
    cout<<lmin;
    return 0;
}