Cod sursa(job #2744691)

Utilizator Simon2712Simon Slanina Simon2712 Data 24 aprilie 2021 23:12:13
Problema Subsir crescator maximal Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>

using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int d[100001],v[100001];
int main()
{
    int n,i,k=1,st,dr,mij,poz,last,a;
    cin>>n>>v[1];
    d[k]=1;
    for(i=2;i<=n;i++)
    {
        cin>>a;
        st=1;
        dr=k;
        while(st<=dr)
        {
            mij=(st+dr)/2;
            if(v[d[mij]]>=a)
                dr=mij-1;
            else
                st=mij+1;
        }
        d[dr+1]=i;
        k=max(dr+1,k);
        v[i]=a;
    }
    cout<<k<<'\n';
    poz=d[k];
    last=k;
    d[last]=v[poz];
    while(poz>1)
    {
        poz--;
        if(v[poz]<d[last])
        {
            last--;
            d[last]=v[poz];
        }
    }
    for(i=1;i<=k;i++)
        cout<<d[i]<<" ";
    return 0;
}