Pagini recente » Cod sursa (job #2095222) | Cod sursa (job #860731) | Cod sursa (job #1175831) | Cod sursa (job #1109872) | Cod sursa (job #1647876)
# include <bits/stdc++.h>
using namespace std;
const int Nmax = 100000 + 5;
int n, m, a[Nmax], sol[Nmax], poz[Nmax], q[Nmax], i, N;
int cautbin(int x)
{
int st = 1, dr = m, mij;
while (st <= dr)
{
mij = (st + dr) / 2;
if (q[mij] == x) return mij;
else if (x > q[mij]) st = mij + 1;
else dr = mij - 1;
}
return st;
}
int main ()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d\n", &n);
for (i = 1; i <= n; ++i)
scanf("%d ", &a[i]);
q[1] = a[i], poz[i] = 1, m = 1;
for (i = 2; i <= n; ++i)
{
poz[i] = cautbin(a[i]);
q[poz[i]] = a[i];
if (poz[i] > m) ++m;
}
for (i = n; i >= 1; --i)
if (poz[i] == m) sol[++N] = a[i], --m;
for (i = N; i >= 1; --i)
printf("%d ", sol[i]);
return 0;
}