Cod sursa(job #3293325)

Utilizator rainerretzler rainer Data 11 aprilie 2025 14:32:43
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include<iostream>
#include<fstream>
using namespace std;

int v[100010];
int dp[100010];
int prevPoz[100010];

pair<int,int> lis(int n, int* a){
	dp[0]=1;
	prevPoz[0]=-1;
	int retVal=1, lastPoz=0;
	for(int i=1;i<n;i++){
		int m=0, p=-1;
		for(int j=0;j<i;j++){
			if(a[j]<a[i]){
				if(dp[j]>m){
					m=dp[j];
					p=j;
				}
			}
		}
		m++;
		dp[i]=m;
		prevPoz[i]=p;
		if(m>retVal){
			retVal=m;
			lastPoz=i;
		}
	}
	return {retVal,lastPoz};
}

void show(int p, ofstream& fout){
	if(prevPoz[p]!=-1){
		show(prevPoz[p], fout);
	}
	fout<<v[p]<<" ";
}

int main(){
	ifstream fin("scmax.in");
	ofstream fout("scmax.out");
	int n;
	fin>>n;
	for(int i=0;i<n;i++){
		fin>>v[i];
	}
	pair<int,int> p=lis(n,v);
	fout<<p.first<<"\n";
	show(p.second, fout);
	// fout<<"\b\n";
	fin.close();
	fout.close();
}