Pagini recente » Cod sursa (job #1896664) | Cod sursa (job #1755438) | Cod sursa (job #2354005) | Cod sursa (job #2484094) | Cod sursa (job #1780872)
#include <cstdio>
#define min(x,y) (x<y?x:y)
using namespace std;
int v[100000], a[100000], b[100000], n, lgb = 1, r[100000], lr = 0;
int main()
{
int i, j, ok;
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &n);
scanf("%d", &v[0]);
b[0] = 0; a[0] = -1;
for(i = 1; i < n; i++)
{
scanf("%d", &v[i]);
a[i] = -1;
if(v[i] < v[b[0]])
b[0] = i;
for(j = lgb - 1; j >= 0; j--)
{
if(v[i] > v[b[j]])
{
a[i] = b[j];
if(j + 1 < lgb && v[b[j + 1]] > v[i])
{
b[j + 1] = i;
}
else if(j + 1 == lgb)
{
b[j + 1] = i;
lgb++;
}
break;
}
}
}
printf("%d\n", lgb);
for(i = b[lgb - 1]; a[i] != -1; i = a[i])
r[lr++] = v[i];
r[lr++] = v[i];
for(i = lr - 1; i >= 0; i--)
printf("%d ", r[i]);
return 0;
}