Cod sursa(job #628034)

Utilizator cristicecCristian Uricec cristicec Data 31 octombrie 2011 14:41:39
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.6 kb
#include<stdio.h>
int a[100007],t[100007],x[100007];
int n;
using namespace std;
void afisare(int f)
{
	if(f){
	  afisare(t[f]);
	  printf("%d " , a[f]);
	}
}

int main(){
  
  freopen("scmax.in","r",stdin);
  freopen("scmax.out","w",stdout);
  scanf("%d", &n);
  int u,p,mid,i,s;
  for(i=1;i<=n;i++)
    scanf("%d", &a[i]);
  
  x[1]=1;
  s=1;
  
  for(i=2;i<=n;i++){
	p=1;
	u=s;
	while(p<=u){
	  mid=(u-p)/2+p;
	  if(a[i]>a[x[mid]])
		p=mid+1;
	  else
		u=mid-1;
    }
    if(p>s)
	  s++;
	x[p]=i;
	t[i]=x[p-1];
  }
  printf("%d\n", s);
  afisare(x[s]);
  return 0;
}