Nu aveti permisiuni pentru a descarca fisierul grader_test10.ok

Cod sursa(job #1784940)

Utilizator popa.andreiPopa Andrei popa.andrei Data 20 octombrie 2016 18:03:32
Problema Subsir crescator maximal Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <iostream>
using namespace std;

int N,i;
int a[100015], s[100015];
int P[100015],M[100015],L;
void afis(int o) {
	if(o > 0)
		afis(P[o]);	
	cout << a[o] << " ";

}

int bs(int nr) {
	int lo = 1,hi = L;
	while (lo <= hi){
		int mid = (lo + hi) / 2;
		if(a[M[mid]] < nr) 
			lo = mid + 1;
		 else
		   hi = mid - 1;
	}
	return lo;
  
}

void LIS() {
	for(i = 0; i < N; i++) {
		int newL = bs(a[i]);
		P[i] = M[newL - 1];
		M[newL] = i;
		if (newL > L)
			L = newL;

	}
	cout << L << '\n';
	afis(M[L]);


}

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];
	LIS();

	return 0;
}