Pagini recente » Cod sursa (job #1469278) | Cod sursa (job #2313004) | Cod sursa (job #1928982) | Cod sursa (job #2168858) | Cod sursa (job #2799301)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1e5,INF = 2e9 + 5;
int q[NMAX + 5],v[NMAX + 5],p[NMAX + 5];
int cnt = 1,st,dr,md;
int cb(int val) {
st = 1;
dr = cnt;
while (st < dr) {
md = (st + dr) / 2;
if (val <= q[md])
dr = md;
else
st = md + 1;
}
if (st == cnt)
q[++cnt] = INF;
q[st] = val;
return st;
}
int main()
{
ifstream fin("scmax.in");
ofstream fout( "scmax.out");
int n;
fin >> n;
for (int i = 1;i <= n;i++)
fin >> v[i];
q[1] = INF;
for (int i = 1;i <= n;i++)
p[i] = cb(v[i]);
fout << cnt - 1 << '\n';
for (int i = cnt - 1;i > 0;i--) {
while (p[n] != i)
n--;
q[i] = v[n];
}
for (int i = 1;i < cnt;i++)
fout << q[i] << ' ';
return 0;
}