Pagini recente » What you gonna do when they come for you? | Cod sursa (job #3349734) | Cod sursa (job #3339412) | Cod sursa (job #3332544) | Cod sursa (job #3320292)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int N = 100000 + 5;
int n, v[N], dp[N], pred[N], lungime[N];
int main() {
fin >> n;
for (int i = 1; i <= n; i++) fin >> v[i];
int lung = 0;
for (int i = 1; i <= n; i++) {
int st = 1, dr = lung, poz = 0;
while (st <= dr) {
int mij = (st + dr) / 2;
if (v[dp[mij]] < v[i]) {
poz = mij;
st = mij + 1;
} else {
dr = mij - 1;
}
}
pred[i] = dp[poz];
int noua = poz + 1;
dp[noua] = i;
if (noua > lung) lung = noua;
lungime[i] = noua;
}
fout << lung << '\n';
// Reconstruim soluția
vector<int> sol;
int p = dp[lung];
while (p) {
sol.push_back(v[p]);
p = pred[p];
}
reverse(sol.begin(), sol.end());
for (auto x : sol) fout << x << ' ';
fout << '\n';
return 0;
}