Pagini recente » Cod sursa (job #1994707) | Cod sursa (job #2845975) | Cod sursa (job #1666581) | Cod sursa (job #2557265) | Cod sursa (job #2171981)
#include <iostream>
#include <cstdio>
using namespace std;
#define DIM 100004
int V[DIM], poz[DIM], cb[DIM], pre[DIM];
int ts, N, x;
int bin_search(int val) {
int pw = 1;
while(pw <= ts) {
pw <<= 1;
}
pw >>= 1;
int pos = 0;
while(pw) {
if(pos + pw <= ts) {
if(cb[pos + pw] < val) {
pos += pw;
}
}
pw >>= 1;
}
return pos;
}
void solve(int pz) {
if(pz == 0) return ;
solve(pre[pz]);
cout << V[pz] << ' ';
}
int main() {
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d\n", &N);
for(int i = 1; i <= N; ++i) {
scanf("%d", &V[i]);
}
int mxpos = 1;
for(int i = 1; i <= N; ++i) {
int pos = bin_search(V[i]);
if(pos == ts) {
cb[++ts] = V[i];
poz[ts] = i;
pre[i] = poz[pos];
mxpos = i;
}
else {
pre[i] = poz[pos];
if(cb[pos + 1] > V[i]) {
cb[pos + 1] = V[i];
poz[pos + 1] = i;
}
}
}
cout << ts << '\n';
solve(mxpos);
cout << '\n';
return 0;
}