Pagini recente » Cod sursa (job #1811877) | Cod sursa (job #405368) | Cod sursa (job #761931) | Cod sursa (job #447048) | Cod sursa (job #2969492)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n;
int useless[100005];
int v[100005];
int bef[100005];
vector <int> ans;
int top;
int BinSearch(int num) {
int lf = 1;
int rg = top;
int best = 0;
while (lf <= rg) {
int mid = (lf + rg) / 2;
if (useless[v[mid]] < num) {
lf = mid + 1;
best = mid;
}
else {
rg = mid - 1;
}
}
return best;
}
int main() {
fin >> n;
for (int i = 1; i <= n; i++) {
int x;
fin >> x;
useless[i] = x;
int index = BinSearch(x);
index++;
v[index] = i;
bef[i] = v[index - 1];
if (index > top) {
top++;
}
}
fout << top << '\n';
int lastIndex = v[top];
ans.push_back(useless[lastIndex]);
while (bef[lastIndex]) {
ans.push_back(useless[bef[lastIndex]]);
lastIndex = bef[lastIndex];
}
while (!ans.empty()) {
fout << ans.back() << ' ';
ans.pop_back();
}
fout << '\n';
}