Cod sursa(job #1784838)

Utilizator popa.andreiPopa Andrei popa.andrei Data 20 octombrie 2016 15:56:25
Problema Subsir crescator maximal Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;

int N,k,i;
int a[100005], s[100005];
map<int,int> parent,nxt;
void afis(int o) {
	if(parent[o] > 0)
		afis(parent[o]);
	
	cout << o << " ";

}
int main() {
//	freopen("f.txt","r",stdin);
	freopen("scmax.in", "r", stdin);
	freopen("scmax.out", "w", stdout);
	cin >> N;
	for(i = 0; i < N; i++) 
		cin >> a[i];
	s[k++] = a[0];
	for(int j = 1; j < N; j++) {
		int idx = std::lower_bound(s,s + k,a[j]) - s;
		if(idx != k) {
			parent[a[j]] = parent[s[idx]];
			nxt[parent[s[idx]]] = a[j];
			parent[nxt[s[idx]]] = a[j];
			s[idx] = a[j];
			
		}
		else {
			parent[a[j]] = s[k - 1];
			nxt[s[k - 1]] = a[j];
			s[k++] = a[j];
			
		}		
	}
	cout << k << '\n';
	afis(s[k - 1]);


	return 0;
}