Cod sursa(job #3280418)

Utilizator Edi17roAnghel Eduard Edi17ro Data 26 februarie 2025 14:02:20
Problema Subsir crescator maximal Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int NMAX = 1e5 + 5;
int v[NMAX + 5];
int d[NMAX + 5];
int l;
int n;

int catare(int x)
{
    int pos = 0;

    for(int step = 1 << 15; step > 0; step >>= 1)
    {
        if(pos + step <= d[0] && d[pos + step] < x)
        {
            pos += step;
        }
    }

    return pos;
}

void solve()
{
    d[1] = v[1];
    d[0] = 1;

    for(int i = 2; i <= n; ++i)
    {
        int pos = catare(v[i]);

        if(pos == d[0])
        {
            ++d[0];
        }
        d[pos + 1] = v[i];
    }

    out << d[0] << '\n';

    for(int i = 1; i <= d[0]; ++i)
    {
        out << d[i] << ' ';
    }
}

int main()
{
    in >> n;

    for(int i = 1; i <= n; ++i)
    {
        in >> v[i];
    }

    solve();

    return 0;
}