Pagini recente » Cod sursa (job #2704297) | Cod sursa (job #2737146) | Cod sursa (job #3129423) | Cod sursa (job #2086815) | Cod sursa (job #1779275)
#include <stdio.h>
#include <string.h>
#define MAX 10005
int n, a[MAX], p[MAX], q[MAX], nr;
int cb(int x){
int s = 1, d = nr, m;
while(s < d){
m = (s + d) / 2;
if(q[m] == x)
return m;
if(q[m] > x){
if(m == 1)
return m;
if(q[m - 1] < x)
return m;
else
d = m - 1;
}
else
s = m + 1;
}
if(s == d){
if(q[s] == x)
return s;
if(q[s] > x){
if(s == 1)
return s;
if(q[s - 1] < x)
return s;
else
return nr + 1;
}
else
return nr + 1;
}
}
void print(int n, int nr){
if(!n || !nr)
return;
if(p[n] == nr){
print(n - 1, nr - 1);
printf("%d ", a[n]);
}
else
print(n - 1, nr);
}
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]);
int pos = cb(a[i]);
if(nr < pos)
nr = pos;
p[i] = pos;
q[pos] = a[i];
}
printf("%d\n", nr);
print(n, nr);
printf("\n");
return 0;
}