Pagini recente » Cod sursa (job #2049265) | Cod sursa (job #2623967) | igorj1 | Cod sursa (job #1311953) | Cod sursa (job #388571)
Cod sursa(job #388571)
#include <cstdio>
const int N = 100001;
int v[N],n,x[N],nx,pred[N];
int caut_bin(int j)
{
int i,pas=1<<16;
for (i = 0; pas != 0; pas >>= 1)
if (i + pas <= nx && v[x[i + pas]] < v[j])
i += pas;
return i + 1;
}
void citire()
{
scanf("%d",&n);
for (int i = 1; i <= n; ++i)
scanf("%d",&v[i]);
}
void completare_x()
{
int j;
nx = 1;
x[1] = 1;
for (int i = 2; i <= n; ++i)
{
j = caut_bin(i);
x[j] = i;
pred[i] = x[j-1];
if (j > nx)
++nx;
}
}
void afisare (int poz)
{
if (pred[poz] != 0)
afisare(pred[poz]);
printf("%d ",v[poz]);
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
citire();
completare_x();
printf("%d\n",nx);
afisare(x[nx]);
return 0;
}