Cod sursa(job #2799301)

Utilizator ElizaTElla Rose ElizaT Data 12 noiembrie 2021 20:05:56
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>

using namespace std;

const int NMAX = 1e5,INF = 2e9 + 5;
int q[NMAX + 5],v[NMAX + 5],p[NMAX + 5];
int cnt = 1,st,dr,md;

int cb(int val) {
    st = 1;
    dr = cnt;
    while (st < dr) {
        md = (st + dr) / 2;
        if (val <= q[md])
            dr = md;
        else
            st = md + 1;
    }
    if (st == cnt)
        q[++cnt] = INF;
    q[st] = val;
    return st;
}
int main()
{
    ifstream fin("scmax.in");
    ofstream fout( "scmax.out");
    int n;
    fin >> n;
    for (int i = 1;i <= n;i++)
        fin >> v[i];
    q[1] = INF;
    for (int i = 1;i <= n;i++)
        p[i] = cb(v[i]);
    fout << cnt - 1 << '\n';
    for (int i = cnt - 1;i > 0;i--) {
        while (p[n] != i)
            n--;
        q[i] = v[n];
    }
    for (int i = 1;i < cnt;i++)
        fout << q[i] << ' ';
    return 0;
}