Cod sursa(job #2721831)

Utilizator AndreiCroitoruAndrei Croitoru AndreiCroitoru Data 12 martie 2021 12:18:44
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>

using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int v[200001],poz[200001],d[200001],ans[200001];
int caut_bin(int x,int dr)
{
    int mij,st=1,ans=0;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(v[poz[mij]]<x)
        {
            ans=mij;
            st=mij+1;
        }
        else
            dr=mij-1;
    }
    return ans;
}
int main()
{
    int n,l=0,b=0,maxim=0;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>v[i];
    }
    for(int i=1;i<=n;i++)
    {
        b=caut_bin(v[i],l);
        l=max(b+1,l);
        d[i]=b+1;
        poz[d[i]]=i;
        maxim=max(maxim,d[i]);
    }
    cout<<maxim<<endl;
    /*for(int i=1;i<=n;i++)
    {
        cout<<d[i]<<" ";
    }
    cout<<'\n';*/
    int cmaxim=maxim;
    for(int i=n;i>=1;i--)
    {
        if(cmaxim==d[i])
        {
            ans[cmaxim]=v[i];
            cmaxim--;
        }
    }
    for(int i=1;i<=maxim;i++)
        cout<<ans[i]<<" ";
    return 0;
}