Cod sursa(job #1647270)

Utilizator Vlad_lsc2008Lungu Vlad Vlad_lsc2008 Data 10 martie 2016 19:45:23
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <cstdio>
#include <iostream>
#define nmax 100005
#define inf 2000000010
using namespace std;

int n,v[nmax],p[nmax],sol[nmax],len;

int poz(int val,int st,int dr)
{
    int mid=(st+dr)/2;
    if(st==dr)
    {
        if( sol[st]==inf )
            { len++; sol[len+1]=inf; }
        sol[st]=val;
        return st;
    }
    else if(sol[mid]<val) poz(val, mid+1,dr);
                     else poz(val,st,mid);
}

int construct(int l)
{
    int i;
    for(i=n;i>0;i--)
        if(p[i]==l)
        {
            n=i-1;
            construct(l-1);
            printf("%d ",v[i]);
            break;
        }
}


int main()
{
    int i;
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    scanf("%d",&n);
    len=0; sol[1]=inf;
    for(i=1;i<=n;i++)
    {
        scanf("%d",&v[i]);
        p[i]=poz(v[i],1,len+1);
    }
    printf("%d\n",len);
    construct(len);
    fclose(stdin);
    fclose(stdout);
    return 0;
}