Cod sursa(job #473406)

Utilizator S7012MYPetru Trimbitas S7012MY Data 29 iulie 2010 12:37:38
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <cstdio>
#define DN 100004

int n,lg,sir[DN],q[DN],poz[DN];

int adaugare(int x,int st,int dr) {
    if(st==dr) {
        if(dr>lg) ++lg;
        q[st]=x;
        return st;
    }
    int mij=(st+dr)/2;
    if(x<=q[mij]) return adaugare(x,st,mij);
    else return adaugare(x,mij+1,dr);
}

int main()
{
    int i;
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	scanf("%d",&n);
	for(i=1; i<=n; ++i) scanf("%d",&sir[i]);
	int k=n;
	for(i=1; i<=n; ++i) poz[i]=adaugare(sir[i],1,lg+1);
	for(i=lg;i;--i) {
	    for( ;poz[k]!=i;--k);
	    q[i]=sir[k];
	}
	printf("%d\n",lg);
	for(i=1; i<=lg; ++i) printf("%d ",q[i]);
	return 0;
}