Pagini recente » Cod sursa (job #1128233) | Cod sursa (job #2313275) | Cod sursa (job #3197679) | Cod sursa (job #2674812) | Cod sursa (job #2339760)
#include <fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int MAXN = 1e5;
const int MAXVAL = 2e9;
int n, v[MAXN + 1], dp[MAXN + 1];
int ans;
void cb(int val) {
int ret = 0;
int add = 1 << 30;
while (add) {
if (ret + add <= n && dp[ret + add] < val) ret += add;
add >>= 1;
}
dp[ret + 1] = min(dp[ret + 1], val);
ans = max(ans, ret + 1);
}
int main() {
in >> n;
for (int i = 1; i <= n; ++ i) in >> v[i];
for (int i = 1; i <= n; ++ i) dp[i] = MAXVAL;
for (int i = 1; i <= n; ++ i) cb(v[i]);
out << ans << '\n';
for (int i = 1; i <= ans; ++ i) out << dp[i] << ' ';
return 0;
}