Pagini recente » Cod sursa (job #1756277) | Cod sursa (job #2430887) | Cod sursa (job #1912022) | Cod sursa (job #2123912) | Cod sursa (job #3233792)
/******************************************************************************
Online C++ Compiler.
Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.
*******************************************************************************/
#include <iostream>
#include <vector>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int main()
{
// vector<int> V = {0, 15, 16, 17, 1, 2};
// int N = V.size() - 1;
vector<int> V;
V.push_back(0);
int N;
in >> N;
for(int k, i = 1; i <= N; ++i) {
in >> k;
V.push_back(k);
}
vector<int> dp(N + 1, 0);
for(int i = 1; i <= N; ++i) {
int maxim = 0;
for(int j = 1; j <= i; ++j) {
if(dp[j] > maxim && V[j] < V[i]) {
maxim = dp[j];
}
}
dp[i] = 1 + maxim;
}
for(auto a : dp) {
cout << a << " ";
}
cout << endl << endl;
int mx = *max_element(dp.begin(), dp.end());
out << mx << endl;
vector<int> sol;
int last = 0;
for(int i = 0; i <= N; ++i) {
if(dp[i] < dp[i + 1]) {
if(V[i + 1] > last) {
sol.push_back(V[i + 1]);
last = V[i + 1];
} else {
sol.clear();
sol.push_back(V[i + 1]);
for(int k = i + 1; k >= 1; --k) {
if(V[k] < V[i + 1]) {
sol.push_back(V[k]);
}
}
reverse(sol.begin(), sol.end());
}
} else if (dp[i] > dp[i + 1] && dp[i] == mx){
break;
}
}
for(auto a : sol) {
out << a << " ";
}
return 0;
}