Pagini recente » Cod sursa (job #1526740) | Cod sursa (job #1817063) | Cod sursa (job #1955941) | Cod sursa (job #1698105) | Cod sursa (job #217503)
Cod sursa(job #217503)
#include <cstdio>
const int MAX_N = 100010;
int n, z;
int a[MAX_N], prec[MAX_N], d[MAX_N], poz[MAX_N];
int bin(int val)
{
int l = 1, r = z, mij;
while (l <= r)
{
mij = l + (r - l) / 2;
if (mij == 0) mij = 1;
if (d[mij - 1] < val && val <= d[mij]) return mij;
if (d[mij] < val) l = mij + 1;
else if (val <= d[mij - 1]) r = mij - 1;
}
return z + 1;
}
int main()
{
int i;
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &n);
for (i = 1; i <= n; ++i)
{
scanf("%d", a + i);
int q = bin(a[i]);
if (q > z) ++z;
d[q] = a[i];
poz[q] = i;
prec[i] = poz[q - 1];
}
printf("%d\n", z);
int x = poz[z];
for (i = z; i > 0; --i)
{
d[i] = a[x];
x = prec[x];
}
for (i = 1; i <= z; ++i) printf("%d ", d[i]);
}