Cod sursa(job #3246232)

Utilizator AndreiSorin26012001Cirpici Andrei Sorin AndreiSorin26012001 Data 2 octombrie 2024 12:53:41
Problema Subsir crescator maximal Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
#include <map>
#include <vector>


int main()
{
    std::ifstream in("scmax.in");
    int n; in >> n;
    std::vector v(n, 0);
    for(int i = 0; i < n; i++)
        in >> v[i];
    in.close();

    std::map<int, int> before;
    before[v[0]] = -1;

    std::vector piles(1, v[0]);
    for(int i = 1; i < n; i++)
    {
        long long index = std::lower_bound(piles.begin(), piles.end(), v[i]) - piles.begin();
        before[v[i]] = index == 0 ? -1 : piles[index - 1];

        if(index == piles.size())
            piles.push_back(v[i]);
        else
            piles[index] = v[i];
    }

    std::vector<int> result;
    for(int i = piles.back(); i != -1; i = before[i])
        result.push_back(i);

    std::ofstream out("scmax.out");
    out << result.size() << '\n';
    for(int i = result.size() - 1; i >= 0; i--)
        out << result[i] << ' ';
    out.close();
    return 0;
}