Pagini recente » Cod sursa (job #2565571) | Cod sursa (job #3216655) | Cod sursa (job #2717692) | Cod sursa (job #1713838) | Cod sursa (job #3139062)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
const int nMax = 100005;
int n, v[nMax], dp[nMax], M[nMax];
int main(){
int lgmax, i, st, dr, poz, mij;
f >> n;
for (i = 1; i <= n; ++i)
f >> v[i];
dp[n] = 1;
M[1] = v[n];
lgmax = 1;
for (i = n - 1; i >= 1; --i) {
st = 1, dr = lgmax;
poz = 0;
while (st <= dr) {
mij = (st + dr) / 2;
if (v[i] >= M[mij])
dr = mij - 1;
else {
st = mij + 1;
poz = mij;
}
}
dp[i] = poz + 1;
M[poz + 1] = max(M[poz + 1], v[i]);
lgmax = max(lgmax, dp[i]);
}
g << lgmax << '\n';
for (i = 1; i <= n; i++) {
if (dp[i] == lgmax) {
g << v[i] << ' ';
lgmax--;
}
}
return 0;
}