Pagini recente » Cod sursa (job #916334) | Cod sursa (job #2329281) | Cod sursa (job #197822) | Cod sursa (job #830710) | Cod sursa (job #3003026)
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#include <algorithm>
#include <utility>
#include <cmath>
#include <map>
#include <deque>
#include <vector>
#include <set>
#include <queue>
#include <bitset>
#include <limits.h>
using namespace std;
/*
ifstream fin("triunghi5.in");
ofstream fout("triunghi5.out");
*/
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int MAX_SIZE = 100000;
int v[MAX_SIZE + 1];
int prevI[MAX_SIZE + 1];
int dp[MAX_SIZE + 1];
void displayMaxSubsir(int i) {
if (prevI[i] == i) {
fout << v[i] << " ";
return;
}
displayMaxSubsir(prevI[i]);
fout << v[i] << " ";
}
int main() {
int n;
fin >> n;
for (int i = 1; i <= n; ++i) {
fin >> v[i];
}
int maximumSubsir = 0;
int startIndex = 0;
for (int i = 1; i <= n; ++i) {
dp[i] = 1;
prevI[i] = i;
for (int j = i - 1; j >= 1; --j) {
if (v[j] < v[i]) {
if (dp[i] < dp[j] + 1) {
dp[i] = dp[j] + 1;
prevI[i] = j;
}
}
}
if (maximumSubsir < dp[i]) {
maximumSubsir = dp[i];
startIndex = i;
}
}
fout << maximumSubsir << "\n";
displayMaxSubsir(startIndex);
}
/*
*/