Pagini recente » Cod sursa (job #421519) | Cod sursa (job #1834212) | Cod sursa (job #2414635) | Cod sursa (job #2954561) | Cod sursa (job #2542732)
#include <bits/stdc++.h>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int nr, a[100003], L[100003], m, n, best[100003], poz, p[100003];
int caut(int x)
{
int p = 0, u = nr;
int m = (p + u) / 2;
while(p <= u)
{
if(a[L[m]] < x && a[L[m + 1]] >= x) return m;
else
{
if(a[L[m + 1]] < x) p = m + 1;
else u = m - 1;
m = (p + u) / 2;
}
}
return nr;
}
void afis(int i)
{
if(p[i] > 0) afis(p[i]);
out << a[i] << " ";
}
int main()
{
in >> n;
nr = 1;
for(int i = 1;i <= n;i++)
in >> a[i];
best[1] = L[1] = 1;
L[0] = 0;
for(int i = 2;i <= n;i++)
{
poz = caut(a[i]);
p[i] = L[poz];
best[i] = poz + 1;
L[poz + 1] = i;
if(nr < poz + 1) nr = poz + 1;
}
int maxim = 0;
poz = 0;
for(int i = 1;i <= n;i++)
if(maxim < best[i])
{
maxim = best[i];
poz = i;
}
out << maxim << '\n';
afis(poz);
return 0;
}