Cod sursa(job #3302040)

Utilizator CosminaneBoac Mihai Cosmin Cosminane Data 2 iulie 2025 12:54:31
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>
#include <vector>
using namespace std;
int dp[100005], v[100005], t[100005];
vector <int> r;
int main(){
	int n, i, j, poz, ras;
	ifstream fin( "scmax.in" );
	ofstream fout( "scmax.out" );
	fin >> n;
	for( i = 1; i <= n; i++ ){
		fin >> v[i];
	}
	v[0] = -INT32_MAX;
	v[n + 1] = INT32_MAX;
	dp[0] = 0;
	for( i = 1; i <= n; i++ ){
		dp[i] = n + 1;
	}
	ras = 0;
	for( i = 1; i <= n; i++ ){
		poz = 0;
		for( j = 20; j >= 0; j-- ){
			if( poz + ( 1 << j ) <= n && v[dp[poz + ( 1 << j )]] < v[i] ){
				poz += ( 1 << j );
			}
		}
		poz++;
		dp[poz] = i;
		t[i] = dp[poz - 1];
		ras = max( poz, ras );
	}
	fout << ras << '\n';
	j = dp[ras];
	for( i = 0; i < ras; i++ ){
		r.push_back( v[j] );
		j = t[j];
	}
	for( i = ras - 1; i >= 0; i-- ){
		fout << r[i] << ' ';
	}
	return 0;
}