Pagini recente » Cod sursa (job #1857753) | Cod sursa (job #442458) | Cod sursa (job #860413) | Cod sursa (job #2889223) | Cod sursa (job #2512487)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
const int nmax = 1e5 + 2;
int a[nmax], n, ext, poz, d[nmax], t[nmax];
void read ()
{
fin >> n;
for (int i=1; i<=n; ++i) fin >> a[i];
}
int bin (int x)
{
int ls = 1, ld = ext, mij;
while(ls <= ld)
{
mij = (ls + ld) / 2;
if (a[d[mij]] < x) ls = mij + 1;
else ld = mij - 1;
}
return ls;
}
void write (int val)
{
if (ext <= 0) return;
for (int i=val; i>=1; --i)
if (t[i] == ext)
{
ext--;
write(i-1);
fout << a[i] << ' ';
return;
}
}
int main()
{
read();
for (int i=1; i<=n ;++i)
{
poz = bin(a[i]);
t[i] = poz;
if (poz > ext)
{
ext++;
d[ext] = i;
}
else if (a[i] < a[d[poz]]) d[poz] = i;
}
fout << ext << '\n';
write(n);
return 0;
}