Pagini recente » Cod sursa (job #2917817) | Cod sursa (job #1995959) | Cod sursa (job #1829123) | Cod sursa (job #2250991) | Cod sursa (job #2856409)
#include <iostream>
using namespace std;
const int NMAX = 1e5;
int n, a[NMAX + 1], dp[NMAX + 1], dpl;
inline int cb(const int Q) {
int st = 1, dr = dpl, mij, ans;
while(st <= dr) {
mij = (st + dr) / 2;
if(a[dp[mij]] >= a[Q]) dr = mij - 1, ans = mij;
else st = mij + 1;
}
return ans;
}
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &n);
for(int i = 1; i <= n; ++i)
scanf("%d", &a[i]);
dp[dpl = 1] = 1;
for(int i = 2; i <= n; ++i)
if(a[dp[dpl]] < a[i]) dp[++dpl] = i;
else dp[cb(i)] = i;
printf("%d\n", dpl);
for(int i = 1; i <= dpl; ++i)
printf("%d ", a[dp[i]]);
return 0;
}