Pagini recente » Cod sursa (job #2135633) | Cod sursa (job #2829007) | Cod sursa (job #2979246) | Cod sursa (job #232362) | Cod sursa (job #2878536)
// Determinati lungimea subsitului crescator maximal (SCMAX)
#include <fstream>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
void SCMAX(int n, int v[100001]) {
int dp[100001];
int pre[100001];
int res[100001];
dp[0] = 1;
pre[0] = 0;
for (int i = 1; i < n; i++) {
pre[i] = 0;
dp[i] = 1;
for (int j = 0; j < i; j++) {
if (v[i] > v[j]) {
if (dp[j] + 1 > dp[i]) {
dp[i] = dp[j] + 1;
pre[i] = j;
}
}
}
}
int sol = dp[0], pos = 1;
for (int i = 1; i < n; i++) {
if (dp[i] > sol) {
sol = dp[i];
pos = i;
}
}
cout << sol << endl;
int j = sol;
for (int i = pos; i != pre[i]; i = pre[i]) {
res[--j] = v[i];
}
for (int i = 0; i < sol; i++) {
cout << res[i] << " " ;
}
cout << endl;
}
int main() {
int n;
int v[100001];
cin >> n;
for (int i = 0; i < n; i++) {
cin >> v[i];
}
SCMAX(n, v);
cin.close();
cout.close();
return 0;
}