Pagini recente » Cod sursa (job #6303) | Cod sursa (job #370813) | Cod sursa (job #1230009) | Cod sursa (job #1030722) | Cod sursa (job #2723372)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>
#include <cmath>
#include <iomanip>
#include <cstdlib>
using namespace std;
ifstream fin("infasuratoare.in");
ofstream fout("scmax.out");
const int NMAX = 100005;
const int INF = 2e9;
vector<int>sol;
int v[NMAX];
vector<int>best;
int lg[NMAX];
int n, k = 0;
int main()
{
ios_base::sync_with_stdio(false);
fin.tie(0);fout.tie(0);
fin >> n;
for(int i = 1 ; i <= n ; i++)
fin >> v[i];
lg[1] = 1;
best.push_back(v[1]);
int ma = 0;
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;
}
*it = v[i];
lg[i] = it-best.begin()+1;
ma = max(ma, lg[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 e:sol)
fout << e << ' ';
return 0;
}