Pagini recente » Cod sursa (job #2158325) | Cod sursa (job #2027218) | Cod sursa (job #1627120) | Cod sursa (job #2980016) | Cod sursa (job #1562841)
#include <cstdio>
using namespace std;
const int nmx = 100002;
int n,v[nmx],sol[nmx],p[nmx],k;
void afish(int lvl, int i) {
if(not i)
return;
if(p[i] == lvl) {
afish(lvl-1,i-1);
printf("%d ", v[i]);
} else
afish(lvl,i-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", &v[i]);
for(int i = 1; i <= n; ++i) {
if(v[i] > sol[k]) {
sol[++k] = v[i];
p[i] = k;
continue;
}
int m,st = 1, dr = k,pos;
while(st <= dr) {
m = st + (dr - st) / 2;
if(sol[m] < v[i])
dr = m - 1;
else {
pos = m;
st = m + 1;
}
sol[pos] = v[i];
p[i] = pos;
}
}
printf("%d\n", k);
afish(k,n);
return 0;
}