Pagini recente » Cod sursa (job #153405) | Cod sursa (job #1364101) | Cod sursa (job #21058) | Cod sursa (job #1761881) | Cod sursa (job #2574628)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int MAX_N = 1e5 + 5;
int n, cnt;
int dad[MAX_N], v[MAX_N], pos[MAX_N];
void solve(int t) {
if (dad[t] == 0) {
fout << v[t] << " ";
return;
}
solve(dad[t]);
fout << v[t] << " ";
}
int main() {
int lo, ri, ans, mid;
fin >> n;
for (int i = 1; i <= n; ++i) {
fin >> v[i];
lo = 1;
ri = cnt;
ans = 0;
while (lo <= ri) {
mid = (lo + ri) / 2;
if (v[pos[mid]] >= v[i]) {
ans = mid;
ri = mid - 1;
} else {
lo = mid + 1;
}
}
if (ans == 0) {
++cnt;
ans = cnt;
}
pos[ans] = i;
dad[i] = pos[ans - 1];
}
fout << cnt << "\n";
solve(pos[cnt]);
return 0;
}