Pagini recente » Cod sursa (job #2838145) | Cod sursa (job #2787948) | Cod sursa (job #1517860) | Cod sursa (job #2673224) | Cod sursa (job #1907435)
# include <bits/stdc++.h>
using namespace std;
const int Nmax = 1e5 + 5;
int a[Nmax], q[Nmax], pos[Nmax], ans[Nmax], m, n, i, N;
int cautbin(int x)
{
int st = 1, dr = m, mid;
while (st <= dr)
{
mid = (st + dr) >> 1;
if (q[mid] == x) return mid;
else if (q[mid] > x) dr = mid - 1;
else st = mid + 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[1], pos[1] = 1, m = 1;
for (i = 2; i <= n; ++i)
{
pos[i] = cautbin(a[i]);
q[pos[i]] = a[i];
if (pos[i] > m) ++m;
}
for (i = n; i >= 1; --i)
if (pos[i] == m) ans[++N] = a[i], --m;
for (i = N; i >= 1; --i)
printf("%d ", ans[i]);
return 0;
}