Cod sursa(job #1414358)

Utilizator gabib97Gabriel Boroghina gabib97 Data 2 aprilie 2015 15:55:57
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <stdio.h>
#include <algorithm>
using namespace std;
int n,u,i,l[100001],p[100001],a[100001],x,t,sol[100001];
int *j;
int main()
{
    freopen ("scmax.in","r",stdin);
    freopen ("scmax.out","w",stdout);
    scanf("%i",&n);
    for (i=1;i<=n;i++) scanf("%i",&a[i]);
    l[++u]=a[1]; p[1]=1;
    for (i=2;i<=n;i++)
    {
        j=lower_bound(l+1,l+u+1,a[i]);
        if (j==l+u+1)
        {
            l[++u]=a[i];
            p[i]=u;
        }
        else
        {
            x=distance(l,j);
            l[x]=a[i];
            p[i]=x;
        }
    }
    printf("%i\n",u);
    x=n;
    for (i=u;i>0;i--)
    {
        while (p[x]!=i)
            x--;
        sol[++t]=a[x];
    }
    for (i=t;i>0;i--) printf("%i ",sol[i]);
    fclose(stdin);
    fclose(stdout);
    return 0;
}