Pagini recente » Cod sursa (job #2272403) | Cod sursa (job #927195) | Cod sursa (job #601336) | Cod sursa (job #2505710) | Cod sursa (job #2254243)
#include <bits/stdc++.h>
using namespace std;
int v[100005];
int b[100005];
int p[100005];
int a[100005];
int n, lv;
int cautbin(int val)
{
int st = 0, dr = lv, mij, rez = -1;
while(dr >= st)
{
mij = (st + dr) / 2;
if(v[mij] < val)
{
rez = mij;
st = mij + 1;
}
else dr = mij - 1;
}
return rez + 1;
}
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &n);
for(int i = 1; i <= n; i++)
scanf("%d", &a[i]);
for(int i = 1; i <= n; i++)
{
int pos = cautbin(a[i]);
v[pos] = a[i];
p[pos] = i;
if(pos != 1)
b[i] = p[pos - 1];
else b[i] = -1;
if(pos > lv)
lv++;
}
int lg = 0, c;
for(c = p[lv]; b[c] != -1; c = b[c])
v[lg++] = a[c];
v[lg++] = a[c];
printf("%d\n", lg);
for(int i = lg - 1; i >= 0; i--)
printf("%d ", v[i]);
return 0;
}