Cod sursa(job #3275439)

Utilizator Cristian_NegoitaCristian Negoita Cristian_Negoita Data 10 februarie 2025 17:15:35
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int NMAX = 1e5 + 5, INF = 2e9 + 1;
int n, a[NMAX], len, q[NMAX], p[NMAX], k, ans[NMAX];

void inserare(int val)
{
    int st = 1, dr = len, poz = len + 1;
    while(st <= dr)
    {
        int mid = (st + dr) / 2;
        if(q[mid] >= val)
        {
            poz = mid;
            dr = mid - 1;
        }
        else
            st = mid + 1;
    }
    if(poz > len)
        q[++len] = val;
    else
        q[poz] = val;

    p[++k] = poz;
}

signed main()
{
    fin >> n;
    q[1] = INF;
    len++;
    for(int i = 1; i <= n; i++)
    {
        fin >> a[i];
        inserare(a[i]);
    }

    fout << len << "\n";
    for(int i = len; i >= 1; i--)
    {
        while(p[k] != i)
            k--;
        ans[i] = a[k];
    }
    for(int i = 1; i <= len; i++)
        fout << ans[i] << " ";

    return 0;
}