Pagini recente » Cod sursa (job #692997) | Rating Mihai Pescaru (MihaiPescaru) | Cod sursa (job #1575626) | Rating Irimia Giulia (Giul_Irimi) | Cod sursa (job #1857957)
#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[i])
dr = m-1;
else st = 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;
}