Pagini recente » Cod sursa (job #2628184) | Cod sursa (job #2930515) | Cod sursa (job #781843) | Cod sursa (job #25102) | Cod sursa (job #2815444)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int N_MAX = 1e5;
const int INF = 2e9 + 5;
int n, k, scm_end;
int v[N_MAX + 5], p[N_MAX + 5];
vector<int> L(N_MAX + 5, 0), L_id(N_MAX + 5, 0);
void print_scm(int i)
{
//cout << i << ' ' << p[i] << '\n';
if(p[i] == -1)
{
out << v[i] << ' ';
return;
}
print_scm(p[i]);
out << v[i] << ' ';
}
int main()
{
in >> n;
for(int i = 0; i < n; i++)
in >> v[i];
for(int i = 0; i < n; i++)
{
int pos = lower_bound(L.begin(), L.begin() + k, v[i]) - L.begin();
L[pos] = v[i];
L_id[pos] = i;
p[L_id[pos]] = (pos > 0 ? L_id[pos - 1] : -1);
if(pos == k)
{
k++;
scm_end = L_id[pos];
}
/*
cout << "ELEMENT: " << i << ' ' << v[i] << ' ' << k << '\n';
cout << "ELEMENT | INDEX | PARENT\n";
for(int j = 0; j < k; j++)
cout << L[j] << ' ' << L_id[j] << ' ' << p[j] << '\n';
cout << "\n\n";
*/
}
out << k << '\n';
print_scm(scm_end);
out << '\n';
return 0;
}