Cod sursa(job #1163283)

Utilizator alex_bucevschiBucevschi Alexandru alex_bucevschi Data 1 aprilie 2014 11:57:20
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <cstdio>
#include <algorithm>
#define oo (1>>31)-1
#define N 100010
using namespace std;
int n,i,a[N],v[N],p,sol,back[N];
bool crit(int i,int j)
{
    return a[i]<a[j];
}
void afis(int poz)
{
    if(poz)
    {
        afis(back[poz]);
        printf("%d ",a[poz]);
    }
}
int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        p=lower_bound(v+1,v+sol+1,i,crit)-v;
        back[i]=v[p-1];
        if(p>sol){sol=p;v[p]=i;continue;}
        if(a[i]<a[v[p]])v[p]=i;
    }
    printf("%d\n",sol);
    afis(v[sol]);
    return 0;
}