Pagini recente » Cod sursa (job #1715845) | Cod sursa (job #995992) | Cod sursa (job #1225637) | Cod sursa (job #1352485) | Cod sursa (job #3261639)
#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#include <set>
#include <map>
#include <algorithm>
#define MAX 2000000001
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int main()
{
int n; cin >> n;
vector<int> v(n);
vector<int> b(n + 1, MAX);
vector<int> dp(n + 1, 0);
for(int i = 0;i < n;cin >> v[i++]);
for(int i = 0;i < n;i++)
{
vector<int>::iterator it = lower_bound(b.begin(), b.end(), v[i]);
int pos = it - b.begin();
b[pos] = v[i];
dp[i] = pos + 1;
}
cout << *max_element(dp.begin(), dp.end()) << endl;
int mx = *max_element(dp.begin(), dp.end());
vector<int> ans;
for(int i = n - 1;i >= 0;i--)
{
if(mx == dp[i])
{
ans.push_back(v[i]);
mx--;
}
}
for(int i = ans.size() - 1;i >= 0;i--) cout << ans[i] << " ";
// for(int i = 0;i < n;i++)
// {
// if(b[i] == MAX) break;
// cout << b[i] << " ";
// }
}