Pagini recente » Cod sursa (job #1632826) | Cod sursa (job #1477778) | Cod sursa (job #3141581) | Cod sursa (job #1431794) | Cod sursa (job #3202081)
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int NMAX = 1e6 + 1;
int n, v[NMAX], best[NMAX], last[NMAX], maxL, maxI, k, p[10], e;
vector<int> sol;
// int main(){
// fin >> n;
// for(int i = 1; i <= n; i++) fin >> v[i], best[i] = 1, last[i] = i;
// for(int i = 1; i <= n; i++)
// for(int j = 1; j <= i; j++)
// if(v[j] < v[i] && best[j] + 1 > best[i]) {
// best[i] = best[j] + 1, last[i] = j;
// if(best[i] > maxL){
// maxL = best[i];
// maxI = i;
// }
// }
// fout << maxL << '\n';
// for(k = maxI; k != last[k]; k = last[k]) sol.push_back(v[k]);
// sol.push_back(v[k]);
// for(int i = sol.size() - 1; i >= 0; i--) fout << sol[i] << ' ';
// return 0;
// }
int main(){
fin >> n;
for(int i = 1; i <= n; i++) fin >> v[i];
sol.push_back(v[1]), p[1] = ++e;
for(int i = 2; i <= n; i++){
int x = v[i];
if(sol.back() < x) sol.push_back(x), p[i] = ++e;
else{
int index = lower_bound(sol.begin(), sol.end(), x) - sol.begin();
sol[index] = x;
p[i] = p[index + 1];
}
}
fout << sol.size() << endl;
e = sol.size();
sol.clear();
for(int i = n; i > 0; i--) if(p[i] == e) sol.push_back(v[i]), e--;
for(int i = sol.size() - 1; i >= 0; i--) fout << sol[i] << ' ';
return 0;
}