Cod sursa(job #863177)

Utilizator Kira96Denis Mita Kira96 Data 23 ianuarie 2013 15:57:54
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 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],sol[MAXX],t,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;
        }
		if(l[p]>max)
		{
			max=l[p];
			for(t=1;t<=l[p];++t)
				sol[t]=s[t];
		}
    }
    printf("%d\n",max);
    for(i=1;i<=max;++i)
        printf("%d ",sol[i]);
    return 0;
}