Cod sursa(job #2569564)

Utilizator XXMihaiXX969Gherghinescu Mihai Andrei XXMihaiXX969 Data 4 martie 2020 12:36:35
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda r3capitusulare Marime 1.03 kb
#include <bits/stdc++.h>

using namespace std;

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

const int DIM = 1e5 + 7;

int v[DIM];
int bst[DIM];
int f[DIM];

int main()
{
    int n;
    in >> n;

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


    int k = 1;
    bst[1] = 1;


    for(int i = 1; i <= n; i++)
    {
        int l = 1;
        int r = k;

        int ans = 0;

        while(l <= r)
        {
            int mid = (l + r) / 2;

            if(v[bst[mid]] < v[i])
            {
                ans = mid;
                l = mid + 1;
            }
            else
            r = mid - 1;
        }

        ans++;

        if(ans > k)
            k++;

        bst[ans] = i;
        f[i] = bst[ans - 1];

    }

    out << k <<'\n';


    int poz = bst[k];

    vector <int> rez;

    while(poz)
    {
        rez.push_back(poz);
        poz = f[poz];
    }

    for(int i = rez.size() - 1; i >= 0; i--)
        out << v[rez[i]] <<" ";
    return 0;
}