Cod sursa(job #495639)

Utilizator andreea1coolBobu Andreea andreea1cool Data 26 octombrie 2010 11:32:47
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include<stdio.h>
#include<string.h>
int i,j,n,rez, v[100001],l[100001],max,x,sf,max1,sol[100010],rec[100010],st,dr,poz[100001],pc;

int cautbin(int st,int dr,int x)
{
	int m, sol1;
	while(st<=dr)
	{
		m=(st+dr)/2;
		if(l[m]<x)
		{
			sol1=m;
			st=m+1;
		}else
		{
			dr=m-1;
		}
	}
	return sol1;
}
	
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]);
    l[0]=-2000000001;
    rez=0;
    for(i=1;i<=n;i++)
    {
        max=cautbin(0,rez,v[i]);
        l[max+1]=v[i];
        if(max+1>rez)
        	rez=max+1;
        poz[max+1]=i;
        sol[i]=poz[max];
    }
    printf("%d\n",rez);
    rec[rez]=l[rez];
    pc=poz[rez];
    for(i=rez-1;i>=1;i--)
    {
		pc=sol[pc];
        rec[i]=v[pc];
    }
    for(i=1;i<=rez;i++)
        printf("%d ",rec[i]);
}