Pagini recente » Cod sursa (job #1602671) | Cod sursa (job #152218) | Cod sursa (job #20107) | Cod sursa (job #715843) | Cod sursa (job #2969489)
#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';
ans.push_back(useless[v[top]]);
while (bef[v[top]]) {
ans.push_back(useless[bef[v[top]]]);
top = bef[top];
}
while (!ans.empty()) {
fout << ans.back() << ' ';
ans.pop_back();
}
fout << '\n';
}