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