Pagini recente » Cod sursa (job #195372) | Cod sursa (job #585524) | Cod sursa (job #2596048) | Cod sursa (job #869239) | Cod sursa (job #2068504)
#include <iostream>
#include <fstream>
#include <stack>
using namespace std;
int main()
{
int n,*v,*dp,*pos;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
fin >> n;
v = new int[n];
dp = new int[n];
pos = new int[n];
for (int i = 0;i < n;i++) {
fin >> v[i];
}
dp[0] = 1;
pos[0] = 0;
for (int i = 1;i < n;i++) {
dp[i] = 1;
pos[i] = i;
for (int j = 0;j < i;j++) {
if (v[i] > v[j]) {
if (dp[i] < dp[j] + 1) {
dp[i] = dp[j] + 1;
pos[i] = j;
}
}
}
}
int maxdp = -1,posmax = -1;
for (int i = 0;i < n;i++) {
if (dp[i] > maxdp) {
maxdp = dp[i];
posmax = i;
}
}
fout << dp[posmax] << endl;
int cnt = maxdp,crt_pos = pos[posmax];
stack<int> st;
st.push(v[posmax]);
while (cnt - 1) {
st.push(v[crt_pos]);
crt_pos = pos[crt_pos];
cnt--;
}
while (!st.empty()) {
fout << st.top() << ' ';
st.pop();
}
fout << endl;
fin.close();
fout.close();
return 0;
}