Cod sursa(job #337640)

Utilizator pykhNeagoe Alexandru pykh Data 4 august 2009 13:33:25
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<stdio.h>
#define N 100005

int v[N], p[N], L[N], n, nr=1;

const char in[]="scmax.in";
const char out[]="scmax.out";

void write(int x)
	{
		if(p[x]>0)write(p[x]);
		printf("%d ",v[x]);
}

int caut(int x)
	{
		int lo, hi, mid;
		for(lo=1, hi=nr, mid=lo+(hi-lo)/2;lo<=hi;)
			if(v[L[mid]]<x && v[L[mid+1]]>=x)return mid;
		else if(v[L[mid+1]]<x)lo=mid+1, mid=lo+(hi-lo)/2;
			else hi=mid-1, mid=lo+(hi-lo)/2;
return  nr;
}

int main()
	{
		freopen(in,"r",stdin);
		freopen(out,"w",stdout);
		int max=0, poz, pozz, i;
		scanf("%d", &n);
		for(i=1;i<=n;++i)
			scanf("%d", &v[i]);
		for(i=1;i<=n;++i)
		{
			poz=caut(v[i]);
			p[i]=L[poz];
			if(nr<poz+1)nr=poz+1;
			L[poz+1]=i;
			if(poz>max)max=poz, pozz=i;
		}
		printf("%d \n", max);
		write(pozz);
		printf("\n");
		return 0;
}