Pagini recente » Cod sursa (job #2824176) | Cod sursa (job #1380672) | Cod sursa (job #3285663) | Cod sursa (job #145867) | Cod sursa (job #174991)
Cod sursa(job #174991)
#include <stdio.h>
#include <string.h>
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
int a[100001], q[100001], n, i, last = 0, prev[100001], temp;
scanf("%d", &n);
for(i = 1; i <= n; ++i)
{
scanf("%d", &a[i]);
}
memset(prev, 0, sizeof(prev));
for(i = n; i > 0; --i)
{
int res = 0, min = 1, mid, max = last;
while(min <= max)
{
mid = (min + max) / 2;
if(a[i] >= a[q[mid]])
{
max = mid - 1;
}
else
{
res = mid;
min = mid + 1;
}
}
q[res + 1] = i;
prev[i] = q[res];
if(res + 1 > last)
{
last = res + 1;
}
}
printf("%d\n", last);
temp = q[last];
while(temp)
{
printf("%d ", a[temp]);
temp = prev[temp];
}
return 0;
}