Cod sursa(job #2582706)

Utilizator AnnaLipianuLipianu Ana AnnaLipianu Data 17 martie 2020 12:03:23
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>

using namespace std;

ifstream cin("scmax.in");
ofstream cout("scmax.out");


int v[100001],poz[100001],rez[100001];
int main()
{
    int i,n,nr,p,mij,st,dr,max,k;
    cin>>n;
    for(i=1;i<=n;i++)
        cin>>v[i];
    nr=1;
    rez[1]=v[1];
    poz[1]=1;
    for(i=2;i<=n;i++)
    {
        p=-1;
        st=1;
        dr=nr;
        while(st<=dr)
        {
            mij=(st+dr)/2;
            if(rez[mij]<v[i])
                st=mij+1;
            else
            {
                p=mij;
                dr=mij-1;

            }
        }
        if(p==-1)
        {
            rez[++nr]=v[i];
            poz[i]=nr;
        }
        else
        {
            poz[i]=p;
            rez[p]=v[i];
        }
    }
    cout<<nr<<'\n';
    k=0;
    for(i=n;i>=1;i--)
        if(poz[i]==nr)
        {
            k++;
            rez[k]=v[i];
            nr--;
        }
    for(i=k;i>=1;i--)
        cout<<rez[i]<<" ";
    return 0;
}