Cod sursa(job #1268979)

Utilizator deresurobertoFMI - Deresu Roberto deresuroberto Data 21 noiembrie 2014 18:40:10
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
//Roberto Deresu - FMI
//Re :)
#include<cstdio>
#define nx 100007
using namespace std;
int n,m,i,v[nx],l[nx],pre[nx];

int caut_bin(int x)
{
    int pas, poz;

    poz = 1;
    pas = 1<<17;

    while(pas >>= 1)
        if(poz+pas <= m && v[l[poz+pas]] <= x)
            poz += pas;

    return poz;
}

void afisare_sir(int x)
{
    if(pre[x]) afisare_sir(pre[x]);
    printf("%d ",v[x]);
}

int main()
{
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	scanf("%d",&n);

	for(i=1;i<=n;i++)
        scanf("%d",&v[i]);


    for(i=1;i<=n;i++)
    {
        int poz = caut_bin(v[i]);

        if(v[i] > v[l[poz]] && l[poz]) poz++;

        l[poz] = i;
        pre[i] = l[poz-1];

        if(poz > m) m++;
    }

    printf("%d\n",m);
    afisare_sir(l[m]);

	return 0;
}