Cod sursa(job #2871094)

Utilizator toma_ariciuAriciu Toma toma_ariciu Data 12 martie 2022 20:59:01
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

const string filename = "scmax";
ifstream fin(filename + ".in");
ofstream fout(filename + ".out");

const int maxN = 100005;
int n, pow2, ans, v[maxN], dp[maxN], s[maxN];

int cautbin(int x)
{
    int aux = 0;
    for(int i = pow2; i > 0; i >>= 1)
    {
        if(aux + i <= n && (s[aux + i] > x))
            aux += i;
    }
    return aux + 1;
}

int main()
{
    fin >> n;
    for(int i = 1; i <= n; i++)
        fin >> v[i];
    pow2 = 1;
    while(pow2 * 2 <= n)
        pow2 *= 2;
    for(int i = n; i >= 1; i--)
    {
        int poz = cautbin(v[i]);
        dp[i] = poz;
        s[poz] = max(s[poz], v[i]);
        ans = max(ans, dp[i]);
    }
    fout << ans << '\n';
    for(int i = 1; i <= n; i++)
        if(dp[i] == ans)
        {
            fout << v[i] << ' ';
            ans--;
        }
    return 0;
}