Cod sursa(job #886982)

Utilizator Kira96Denis Mita Kira96 Data 23 februarie 2013 14:22:37
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <stdio.h>
using namespace std;
   
#define MAXX 100010 
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-i)/2;
        if(x>s[m])
            i=m+1;
        else 
			j=m-1;
    }
	if(i>k)
		return 0;
	return m;
}
   
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;
}