Cod sursa(job #2371185)

Utilizator caesar2001Stoica Alexandru caesar2001 Data 6 martie 2019 16:32:00
Problema Subsir crescator maximal Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#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;
}