Pagini recente » Monitorul de evaluare | Cod sursa (job #1333992) | Cod sursa (job #1363068) | Cod sursa (job #358949) | Cod sursa (job #3345489)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
vector<int> scmax(int n , vector<int> &v){
vector<int> dp(n+1);
vector<int> pred(n+1, 0); // pentru stocarea elementului
dp[1] = 1; // pentru primul element
for(int i = 2; i <= n; i++){
// setam dp 1 automat
dp[i] = 1;
for(int j = 1; j <= i-1; j++){
if(v[j] < v[i]){
if(dp[j] + 1 > dp[i]){
dp[i] = dp[j] + 1;
pred[i] = j;
}
}
}
}
int max1 = dp[1];
int poz_max = 1;
for (int i = 1; i <= n; i++){
if(dp[i] > max1){
max1 = dp[i];
poz_max = i;
}
}
vector<int> subsir(max1 + 1);
int curent = poz_max;
int k = max1;
while(curent != 0){
subsir[k] = v[curent];
curent = pred[curent];
k--;
}
return subsir;
} // Se închide funcția scmax
int main(){
int i, n;
fin >> n;
vector<int> v(n+1);
for(i = 1; i <= n; i++) {
fin >> v[i];
}
// Preluăm rezultatul din funcție
vector<int> rezultat = scmax(n, v);
// Afișăm pe prima linie lungimea maximă
fout << rezultat.size() - 1 << "\n";
// Afișăm pe a doua linie elementele
for(int i = 1; i < rezultat.size(); i++) {
fout << rezultat[i] << " ";
}
return 0;
}