Cod sursa(job #966333)

Utilizator dropsdrop source drops Data 25 iunie 2013 18:49:39
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <deque>
#include <list>
#include <string>
#include <algorithm>
using namespace std;
ifstream ff("scmax.in");
ofstream gg("scmax.out");

#define max 100001
int n, aa[max], bb[max], cc[max], k;

int bsc(int l, int r, int v){
	int m;
	while(l<r){
		m=(l+r)/2;
		if(cc[m]<v) l=m+1; else r=m;
	}
	return l;
}

void pnt(int n){
	for(int i=n;i>0;i--)
	if(bb[i]==k){ k--; pnt(i-1); gg << aa[i] << " "; }
}

int main(){
	int p;
	ff >> n;
	for(int i=1;i<=n;i++) ff >> aa[i];
	for(int i=1;i<=n;i++){
		p = bsc(1,k+1,aa[i]);
		bb[i]=p;
		cc[p]=aa[i];
		if(p>k)k=p;
	}
	gg << k << "\n";
	pnt(n);
	return 0;
}