Pagini recente » Cod sursa (job #530952) | Cod sursa (job #2654378) | Cod sursa (job #276405) | Cod sursa (job #455302) | Cod sursa (job #2977793)
#include <bits/stdc++.h>
using namespace std;
string np = "scmax";
ifstream f(np + ".in");
ofstream g(np + ".out");
// #define f cin
// #define g cout
int n, len;
vector<int> topuri;
map<int, int> ant;
// vector<stack<int>> lista(100003);
int cb(int nr)
{
int st = 1, dr = len, mid, rez = -1;
mid = (st + dr) / 2;
while (st <= dr)
{
mid = (st + dr) / 2;
if (nr <= topuri[mid])
rez = mid, dr = mid - 1;
else
st = mid + 1;
}
return rez;
}
int main()
{
f >> n;
vector<int> v(n + 1);
for (int i = 1; i <= n; i++)
f >> v[i];
topuri.resize(n + 1);
for (int i = 1, poz; i <= n; i++)
{
poz = cb(v[i]);
if (poz == -1)
poz = len + 1, len = poz;
// lista[poz].push(v[i]);
topuri[poz] = v[i];
ant[v[i]] = topuri[poz - 1];
}
vector<int> rez;
for (int u = topuri[len]; u; u = ant[u])
rez.push_back(u);
reverse(rez.begin(), rez.end());
g << rez.size() << '\n';
for (auto x : rez)
g << x << " ";
return 0;
}