Cod sursa(job #1299528)

Utilizator nacrocRadu C nacroc Data 23 decembrie 2014 18:29:44
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include<stdio.h>
#define NMAX 100001

using namespace std;

int v[NMAX],L[NMAX],sol[NMAX],sir[NMAX];

int bin(int x,int p,int q){
    if(q<p) return 0;
    int mij=(p+q)/2;
    if(x==sol[mij]) return mij;
    if(x<sol[mij]) return bin(x,p,mij);
    return bin(x,mij+1,q);
}

int main(){
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    int n,k=0,index=0;
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
        scanf("%d",&v[i]);
    for(int i=1;i<=n;++i){
        if(sol[1]>=v[i]){
            L[i]=1;
            sol[1]=v[i];
        }
        else
            if(!bin(v[i],1,k) && v[i]>=sol[k]){
                sol[++k]=v[i];
                L[i]=k;
            }
            else
                L[i]=bin(v[i],1,k);

    }
    printf("%d\n",k);
    for(int i=n;i>=1;--i)
        if(L[i]==k){
            sir[++index]=v[i];
            --k;
        }
    for(int i=index;i>=1;--i)
        printf("%d ",sir[i]);
    return 0;
}