Cod sursa(job #886988)

Utilizator Kira96Denis Mita Kira96 Data 23 februarie 2013 14:24:36
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <stdio.h>
using namespace std;
 
#define MAXX 100010 //se fol pt a mai optimiza un pic
int v[MAXX],s[MAXX],l[MAXX],n,i,j,k,p,a,max;
 
int caut_binar(int x){
    int m,i,j;
    i=1;
    j=k;
    while(i<=j){
        m=(i+j)/2;
        if(s[m-1]<x&&s[m]>=x)
            return m;
        else if(s[m]>=x)
                j=m-1;
        else i=m+1;
    }  
    return 0;
     
}
 
int main(){
    freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
 
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&v[i]);
    s[1]=v[1];
    l[1]=1;
    k=1;
    for(p=2;p<=n;p++){
        a=caut_binar(v[p]);
        if(a==0){
            s[++k]=v[p];
            l[p]=k;
        }
        else {
            s[a]=v[p];
            l[p]=a;
        }
    }
 
    for(i=1;i<=n;i++)
        if(l[i]>max)
            {max=l[i];p=i;
            }
    k=0;
    printf("%d\n",max);
    while(max){
        if(l[p]==max) {
            s[++k]=v[p]; max--;
        }
        p--;
             
    }
    for(i=k;i>0;i--)
        printf("%d ",s[i]);
    return 0;
}