Cod sursa(job #2142484)

Utilizator ionicaion ionica Data 25 februarie 2018 10:12:25
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
#define NM 100001

using namespace std;

int n,a[NM],P[NM],L,Q[NM],lg,S[NM];
ifstream fin("scmax.in");
ofstream fout("scmax.out");
void scrie()
{
    int k,i;
    k=n;
    for(i=lg;i>=1;i--)
    {
        while(P[k]!=i)
            k--;
        S[i]=a[k];
    }

    fout<<lg<<'\n';
    for(i=1;i<=lg;i++)
          fout<<S[i]<<' ';
}
void adaug(int v,int i)
{
    int st,dr,mij,poz;
    st=1;dr=lg;
    poz=-1;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(Q[mij]>=v)
        {
            poz=mij;
            dr=mij-1;
        }
        else st=mij+1;
    }
    if(poz==-1)
        {
            lg++;
            poz=lg;
        }
    Q[poz]=v;
    P[i]=poz;

}
int main()
{
    int i;
    fin>>n;
    for(i=1;i<=n;i++)
            fin>>a[i];

    lg=0;
    for(i=1;i<=n;i++)
        adaug(a[i],i);
    scrie();
}