Cod sursa(job #2974257)

Utilizator dumitrache12Dumitrache Iulian dumitrache12 Data 3 februarie 2023 17:52:23
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include<bits/stdc++.h>
using namespace std;

const int N = 100009;
int v[N], idxs[N], len, n, pos[N], q[N], sol[N];

ifstream in ("scmax.in");
ofstream out("scmax.out");
// auto& in = cin;
// auto& out = cout;

void read()
{
	in>>n;
	for(int i=0;i<n;i++)
		in>>v[i];
}
void show()
{
	out<<"q[]: ";
	for(int i=0;i<len;i++)
		out<<q[i]<<' ';
	out<<endl;
	
	out<<"p[]: ";
	for(int i=0;i<n;i++)
		out<<pos[i]<<' ';
	out<<endl;
}
void rebuild()
{
	int s = len - 1;
	// out<<"s: "<<s<<endl;
	for(int i=n-1;i>=0;i--)
		if(pos[i] == s)
			sol[s--] = v[i];
}
int main(){
	read();
	
	q[0] = v[0];
	len = 1;
	pos[0] = 0;
	// show();
	for(int i=1; i<n; i++)
	{
		int p = upper_bound(q, q+len, v[i]) - q;
		if(q[p-1] == v[i])	p--;
		if(p == len)		len++;
		q[p] = v[i];
		pos[i] = p;
		// show();
		
	}
	out<<len<<endl;
	// show();
	rebuild();
	for(int i=0;i<len;i++)
		out<<sol[i]<<' ';
	out<<endl;
	return 0;
}