Pagini recente » Cod sursa (job #839524) | Cod sursa (job #2325646) | Cod sursa (job #2172427) | Cod sursa (job #2801576) | Cod sursa (job #3169064)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
const int NMAX=1e5+1;
int n;
int a[NMAX], d[NMAX], p[NMAX];
vector<int> lis(int v[]) {
for (int i=1;i<=n;i++) {
d[i]=1;
p[i]=-1;
}
for (int i=1;i<=n;i++) {
for (int j=1;j<i;j++) {
if (a[j]<a[i] && d[i]<d[j]+1) {
d[i]=d[j]+1;
p[i]=j;
}
}
}
int ans=d[1], pos=1;
for (int i=2;i<=n;i++) {
if (d[i]>ans) {
ans=d[i];
pos=i;
}
}
vector<int> subseq;
while (pos!=-1) {
subseq.push_back(a[pos]);
pos=p[pos];
}
reverse(subseq.begin(), subseq.end());
return subseq;
}
int main()
{
f >> n;
for (int i=1;i<=n;i++) {
f >> a[i];
}
vector<int> ans=lis(a);
g << ans.size() << '\n';
for (int x:ans) g << x << ' ';
return 0;
}