Cod sursa(job #3274263)

Utilizator Cyb3rBoltSbora Ioan-David Cyb3rBolt Data 5 februarie 2025 22:25:43
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, v[100010], dp[100010], lis[100010];

inline int binarySearch(int st, int dr, int val) {
    if(st == dr) return st;
    else {
        int mid = (st + dr) / 2;
        if(lis[mid] >= val) return binarySearch(st, mid, val);
        else return binarySearch(mid + 1, dr, val);
    }
}

signed main()
{
    fin >> n;
    for(int i=1; i<=n; i++) fin >> v[i], lis[i] = INT_MAX;
    for(int i=1; i<=n; i++) {
        int poz = binarySearch(1, n, v[i]);
        dp[i] = poz, lis[poz] = v[i];
    }
    int maxim = -1;
    for(int i=1; i<=n; i++) maxim = max(maxim, dp[i]);
    fout << maxim << '\n';
    vector<int> rez;
    for(int i=n; i>=1; i--)
        if(dp[i] == maxim) rez.push_back(v[i]), maxim--;
    reverse(rez.begin(), rez.end());
    for(int i : rez) fout << i << " ";

    return 0;
}