Pagini recente » Cod sursa (job #489304) | Cod sursa (job #1698973) | Cod sursa (job #465765) | Cod sursa (job #621773) | Cod sursa (job #2371185)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <utility>
#include <cmath>
#include <string>
#include <cstring>
#include <set>
#include <queue>
#include <map>
#include <stack>
#define ll long long
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int INF = 2000000005;
int main() {
int n;
in >> n;
vector<int> v(n + 1, 0);
for(int i = 1; i <= n; i ++)
in >> v[i];
vector<int> dp(n + 1, INF);
for(int i = 1; i <= n; i ++) {
int ans = 0;
for(int step = (1 << 16); step; step >>= 1)
if(ans + step <= n && dp[ans + step] < v[i])
ans += step;
dp[ans + 1] = min(dp[ans + 1], v[i]);
}
for(int i = n; i >= 1; i --) {
if(dp[i] != INF) {
out << i << "\n";
for(int j = 1; j <= i; j ++)
out << dp[j] << " ";
break;
}
}
return 0;
}