Pagini recente » Cod sursa (job #1068979) | Cod sursa (job #1196983) | Istoria paginii utilizator/colt516 | Cod sursa (job #1039868) | Cod sursa (job #1857964)
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int a[100005], i, j, n, lm, x;
int bst[100005], pb[100005], sol[100005];
int cb(int x) {
int st = 1, dr = lm, m;
while (st <= dr) {
m = (st+dr)/2;
if (x > bst[m])
st = m+1;
else dr = m-1;
}
return st;
}
int main() {
f >> n;
for (i = 1; i <= n; i++) {
f >> a[i];
if (a[i] > bst[lm])
lm++, x = lm;
else {
x = cb(a[i]);
if (x > lm)
lm++;
}
bst[x] = a[i];
pb[i] = x;
}
g << lm << '\n';
for (i = n; i >= 1&&lm>0;i--)
if (pb[i]==lm)
sol[++j] = a[i],lm--;
for (i = j;i>=1;i--)
g << sol[i] << ' ';
return 0;
}