Cod sursa(job #2897657)

Utilizator disinfoion ion disinfo Data 4 mai 2022 14:32:47
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <iostream>
#include <vector>
#define MAX 100010
#define INF 2000000002

using namespace std;
int v[MAX];
int predec[MAX];
int prev_key[MAX];

class node{
	public:
		int data;
		int key;
};

node sir[MAX];

int binsearch(int k, int l, int r){
	int m = (l+r)/2;

	if(r - l == 1)
		return r;
	else if(sir[m].data >= k)
		return binsearch(k, l, m);
	else
		return binsearch(k, m, r);

}


void update(int key, int k, int n){
	int idx;
	
	idx = binsearch(k, 1, n+1);

	sir[idx].data = k;
	sir[idx].key = key;
	prev_key[key] = sir[idx - 1].key;


}


int main(){
	ifstream fin;
	ofstream fout;
	fin.open("scmax.in");
	fout.open("scmax.out"); 
	int n, i;
	
	

	fin >> n;
	sir[1].data = 0;
	for(i = 2; i <= n + 3; ++i){
		sir[i].data = INF;
	}


	for(int i=1; i <= n; ++i){
		fin >> v[i];
		update(i, v[i], n);
	}
	int size = binsearch(INF, 1, n+2) - 2;
	fout << size << "\n";

	int ans[MAX];
	int top = 0;
	int current;
	current = sir[size+1].key;

	while(v[current] != 0){
		ans[top++] = v[current];
		current = prev_key[current];
	}
	for(int i=size - 1; i>=0; --i)
		fout << ans[i] << " ";

}