Cod sursa(job #3182494)

Utilizator amunnumeVlad Patrascu amunnume Data 9 decembrie 2023 09:02:25
Problema Secv Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <bits/stdc++.h>
#define N 5005
using namespace std;
ifstream fin("secv.in");
ofstream fout("secv.out");
int n,i,j,k,t,st,dr,mid,sol,l,v[N],d[N],e[N],h[N];
map<int,int> m;
int main()
{
    fin>>n;
    for(i=1;i<=n;++i)
    {
        fin>>v[i];
        if(!m[v[i]])
        {
            m[v[i]]=1;
            ++k;
        }
    }
    for(i=1;i<=n;++i)
    {
        if(i==1)
        {
            t=1;
            d[1]=v[1];
            e[1]=1;
            h[1]=1;
            continue;
        }
        if(v[i]>d[t])
        {
            ++t;
            d[t]=v[i];
            e[t]=i;
            h[i]=t;
            if(t==k) break;
        }
        else
        {
            st=1; dr=t; sol=0;
            while(st<=dr)
            {
                mid=(st+dr)>>1;
                if(d[mid]<v[i]) {st=mid+1;}
                else {sol=mid; dr=mid-1;}
            }
            h[i]=sol;
            d[sol]=v[i];
            e[sol]=i;
        }
    }
    t=v[e[k]]; j=e[k];
    //fout<<t<<'\n';
    for(i=e[k]-1;i>=1;--i)
    {
        //fout<<h[i]<<'\n';
        if(v[i]>t) continue;
        if(h[i]==h[j]-1)
        {
            t=v[i];
            j=i;
            if(h[i]==1)
            {
                fout<<e[k]-i+1;
                return 0;
            }
        }
    }
    return 0;
}