Cod sursa(job #964152)

Utilizator Luncasu_VictorVictor Luncasu Luncasu_Victor Data 20 iunie 2013 11:47:48
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
#define lmax 100001
int n,vv[lmax],bb[lmax],cc[lmax],k;

int up(int x){
	int st=0,dr=k+1,md;
	while(st<dr){
		md=(st+dr)/2;
		if(cc[md]<x)st=md+1; else dr=md;
	}
	return st;
}

void out(int n){
	if(n>0){
		for(int i=n-1;i>=0;i--)
			if(bb[i]==k){
				k--;
				out(i);
				g << vv[i] << " ";
			}
	}
}

int main(){
	int p;
	f >> n;
	for(int i=0;i<n;i++) f >> vv[i];
	for(int i=0;i<n;i++){
		p=up(vv[i]);
		cc[p]=vv[i];
		if(p>k)k=p;
		bb[i]=p;
	}
	g << k << "\n";
	out(n);
	//for(int i=0;i<n;i++) cout << bb[i] << " ";
	
	return 0;
}