Pagini recente » Cod sursa (job #2815211) | Cod sursa (job #2750934) | Cod sursa (job #2941105) | Cod sursa (job #2611705) | Cod sursa (job #1861626)
#include <fstream>
using namespace std;
ifstream F("scmax.in");
ofstream G("scmax.out");
#define INF 1999999999
int n, i, j, len, st, dr, mij, spot, s1, s2;
int a[100010], d[100010], path[100010];
int main()
{
F >> n;
for(i = 1; i <= n; ++ i)
F >> a[i];
len = 1;
for (j = 1 ; j <= n ; j++) d[j] = INF;
for (j = 1 ; j <= n ; j++) {
st = 1; dr = len + 1;
spot = -INF;
while (st <= dr) {
mij = (st + dr) / 2;
if (d[mij] == INF || a[j] <= a[d[mij]]) {
spot = mij;
dr = mij - 1;
} else {
st = mij + 1;
}
}
d[spot] = j;
path[spot] = d[spot - 1];
len = max(len, spot);
}
G << len << '\n';
for (i = 1 ; i <= len ; i++) {
G << a[d[i]] << ' ';
}
return 0;
}