Cod sursa(job #900696)

Utilizator SerbanAlexandru9Serban Alexandru SerbanAlexandru9 Data 28 februarie 2013 21:20:10
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <stdio.h>
#define nmax 100001
#define inf  2000000002
using namespace std;


int n,v[nmax],p[nmax],q[nmax],s[nmax],l;

void cit()
{
    freopen("scmax.in","r",stdin);
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&v[i]);
        q[i]=inf;
    }
    fclose(stdin);
}
void init(int k,int st,int dr,int poz)
{
    int m;
    if(st==dr){
        if(q[st]>k){
            q[st]=k;
            p[poz]=st;
        }
    }
    else
    {
     m=(st+dr)/2;
     if(k<=q[m])
            init(k,st,m,poz);
     else
            init(k,m+1,dr,poz);
    }
}
void afis()
{
    int k=n,i;
    for(i=l;i>0;i--){
        while(i!=p[k])
            k--;
            s[i]=v[k];
    }
    for(i=1;i<=l;i++)
        printf("%d ",s[i]);
}
int main()
{   cit();
    for(int i=1;i<=n;i++){
        init(v[i],1,l+1,i);
        if(q[l+1]!=inf)
            l++;
    }
    freopen("scmax.out","w",stdout);
    printf("%d\n",l);
    afis();
    fclose(stdout);
    return 0;
}