Pagini recente » Cod sursa (job #1975284) | Monitorul de evaluare | Cod sursa (job #643699) | Cod sursa (job #2872752) | Cod sursa (job #186903)
Cod sursa(job #186903)
#include <cstdio>
#define MAX_N 100000
int A[MAX_N],B[MAX_N],C[MAX_N];
int M,N;
int bs(int k)
{
int li = 0,lf = M,pz = -1;
while(li <= lf)
{
int m = li + ((lf - li) >> 1);
if(B[m] >= k)
lf = m - 1,pz = m;
else
li = m + 1;
}
return pz;
}
void solve()
{
int i,j,poz;
scanf("%d\n",&N);
for(i=0; i<N; i++)
{
scanf("%d ",A+i);
if((poz = bs(A[i])) < 0)
B[C[i] = M++] = A[i];
else
B[C[i] = poz] = A[i];
}
printf("%d\n",M);
for(i = N-1, j = M-1;j >= 0;j--)
{
while(C[i] != j)
i--;
B[j] = A[i];
}
for(i = 0; i<M; i++)
printf("%d ",B[i]);
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
solve();
}