Cod sursa(job #932320)

Utilizator h2g2Ford Prefect h2g2 Data 28 martie 2013 20:35:52
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#define nmax 100005
using namespace std;

int v[nmax], h[nmax], n;
vector <int> q, sol;

void insert(int i) {
	int val = v[i];
	int lo, mid, hi;

	lo = -1;
	hi = q.size();

	while(hi - lo > 1) {
		mid = lo + (hi-lo)/2;
		if( val > q[mid] ) lo = mid;
		else hi = mid;
	}
	
	if(hi == q.size()) {
		q.push_back(val);
		h[i] = q.size();
	}
	else {
		q[hi] = val;
		h[i] = hi + 1;
	}
	//for(i=0; i<q.size(); i++) cout<<q[i]<<" ";
	//cout<<"\n";
}

int main() {
	ifstream f("scmax.in");
	ofstream g("scmax.out");

	f>>n;
	for(int i=1; i<=n; i++) {
		f>>v[i];
		insert(i);
	}

	int dim = q.size(), i;
	g<<dim<<"\n";

	for(i=n; i>=1; i--)
		if(h[i] == dim) {
			sol.push_back(v[i]);
			dim--;
		} 

	for(i=sol.size()-1; i>=0; i--) g<<sol[i]<<" ";
	g<<"\n";

	return 0;
}