Pagini recente » Cod sursa (job #2616158) | Cod sursa (job #1962529) | Cod sursa (job #2349846) | Cod sursa (job #1826700) | Cod sursa (job #2923853)
#include <bits/stdc++.h>
#define INFILE "scmax.in"
#define OUTFILE "scmax.out"
#define DIM 100005
using namespace std;
ifstream f(INFILE);
ofstream g(OUTFILE);
int n, length[DIM], best[DIM], v[DIM], len;
vector <int> solution;
int cb(int val) {
int st = 1, dr = len, poz = len + 1;
while (st <= dr) {
int mid = (st + dr) / 2;
if (best[mid] >= val) {
poz = mid, dr = mid - 1;
} else {
st = mid + 1;
}
}
return poz;
}
int main() {
f >> n;
for (int i = 1; i <= n; i++) {
f >> v[i];
int poz = cb(v[i]);
best[poz] = v[i];
length[i] = poz;
len = max(len, poz);
}
int ind = n, actualLength = len, last = 100000000;
while (actualLength) {
if (actualLength == length[ind] && last > v[ind]) {
solution.push_back(v[ind]);
actualLength -= 1;
last = v[ind];
}
ind--;
}
reverse(solution.begin(), solution.end());
g << len << "\n";
for (auto k: solution) {
g << k << " ";
}
return 0;
}