Cod sursa(job #2280033)

Utilizator HoratioHoratiu Duma Horatio Data 10 noiembrie 2018 11:05:41
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <cstdio>

using namespace std;


int sir[100004];
int cop[100004];
int poz[100004];
int n;
int u=1;

void citire()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%ld",&sir[i]);
}


int cbinara(int x)
{
    int m;
    int st=1,dr=u;
    while(st<=dr)
    {
        m=(st+dr)/2;
        if(x>cop[m])
            st=m+1;
        else if(x<=cop[m])
            dr=m-1;
    }
    return st;

}
void prelucrare()
{
  cop[1]=sir[1];
    poz[1]=1;
    int x;
    for(int i=2;i<=n;i++)
        {
        x=cbinara(sir[i]);
        cop[x]=sir[i];
        poz[i]=x;
        if(x>u)
        {
            u=x;
        }

        }
    printf("%d\n",u);
    x=u;
    for(int i=n;i>=1;i--)
    {
        while(poz[i]!=u)
            i--;
        cop[u]=sir[i];
        u--;
    }
    for(int i=1;i<=x;i++)
        printf("%d ",cop[i]);
}


int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    citire();
    prelucrare();
    return 0;
}