Cod sursa(job #3357189)

Utilizator horia_Horia Casuneanu horia_ Data 6 iunie 2026 20:46:57
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");

int a[100005];
int d[100005];
int idx[100005];
int parent[100005];
int main()
{
    int N;
    fin >> N;
    for (int i = 1; i <= N; ++i)
        fin >> a[i];
    int len = 0;
    for (int i = 1; i <= N; ++i)
    {
        int st = 0, dr = len, pos = 0;
        while (st <= dr)
        {
            int mij = (st + dr) / 2;
            if (d[mij] < a[i])
            {
                pos = mij;
                st = mij + 1;
            }
            else
            {
                dr = mij - 1;
            }
        }
        int newLen = pos + 1;
        d[newLen] = a[i];
        idx[newLen] = i;
        if (pos > 0)
            parent[i] = idx[pos];
        else
            parent[i] = 0;
        if (newLen > len)
            len = newLen;
    }
    fout << len << "\n";
    vector<int> sol;
    int p = idx[len];
    while (p != 0)
    {
        sol.push_back(a[p]);
        p = parent[p];
    }
    reverse(sol.begin(), sol.end());
    for (auto x : sol)
        fout << x << " ";
    return 0;
}