Pagini recente » Cod sursa (job #2625603) | Cod sursa (job #726907) | Cod sursa (job #346412) | Cod sursa (job #1020593) | Cod sursa (job #2874749)
using namespace std;
#include<bits/stdc++.h>
int N;
int v[100001], cb[100001], ts;
int poz[100001], pre[100001];
int bin_search(int val) {
int pw = 1;
while (pw <= ts) {
pw *= 2;
}
pw /= 2;
int pos = 0;
while (pw) {
if (pos + pw <= ts) {
if (cb[pos+pw] < val) {
pos += pw;
}
}
pw /= 2;
}
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;
}