Pagini recente » Cod sursa (job #1935302) | Cod sursa (job #2172747) | Cod sursa (job #1777344) | Cod sursa (job #2866692) | Cod sursa (job #2244440)
#include <cstdio>
using namespace std;
void pr(int sir_init[],int pozs[], int i)
{
if (pozs[i])
pr(sir_init, pozs, pozs[i]);
printf("%d ", sir_init[i]);
}
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
int n, i, j, st, dr, m, nr = 1;
scanf("%d", &n);
int sir_init[n+2], best[n+2], maxs[n+2], pozs[n+2];
for(i=1; i<=n; ++i)
scanf("%d", &sir_init[i]);
best[1] = maxs[1] = 1;
maxs[0] = 0;
for(i=2; i<=n; ++i)
{
st = 0;
dr = nr;
while (st <= dr)
{
m = (st+dr) / 2;
if (sir_init[maxs[m]] < sir_init[i] && sir_init[maxs[m+1]] >= sir_init[i])
break;
if (sir_init[maxs[m+1]] < sir_init[i])
st = m+1;
else
dr = m-1;
}
pozs[i] = maxs[m];
maxs[m+1] = i;
best[i] = m+1;
if (nr < m+1)
nr = m+1;
}
j = 1;
for(i=2; i<=n; ++i)
if(best[i] > best[j])
j = i;
printf("%d\n", best[j]);
pr(sir_init, pozs, j);
fclose(stdin);
fclose(stdout);
return 0;
}