Pagini recente » Cod sursa (job #3168599) | Cod sursa (job #609442) | Cod sursa (job #3226371) | Cod sursa (job #618388) | Cod sursa (job #2739196)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("date.in");
ofstream fout("date.out");
const int NMAX = 100005;
int n;
int v[NMAX], lg[NMAX];
vector<int>best;
vector<int>sol;
int main()
{
ios_base::sync_with_stdio(false);
fin.tie(0);fout.tie(0);
int ma = 0;
fin >> n;
for(int i = 1 ; i <= n ; i++)
fin >> v[i];
lg[1] = 1;
best.push_back(v[1]);
for(int i = 2 ; i <= n ; i++)
{
vector<int>::iterator it = lower_bound(best.begin(),best.end(),v[i]);
if(it == best.end())
{
best.push_back(v[i]);
lg[i] = best.size();
ma = max(ma, lg[i]);
continue;
}
int pos = it-best.begin()+1;
lg[i] = pos;
*it = v[i];
}
int cnt = ma;
fout << ma << '\n';
for(int i = n ; i >= 1 ; i--)
if(lg[i] == cnt)
{
sol.push_back(v[i]);
cnt--;
}
reverse(sol.begin(),sol.end());
for(int i = 0 ; i < sol.size() ; i++)
fout << sol[i] << ' ';
fout << '\n';
return 0;
}