Cod sursa(job #2736626)

Utilizator dimi999Dimitriu Andrei dimi999 Data 3 aprilie 2021 18:16:23
Problema Subsir crescator maximal Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>
#define INF 1e9
using namespace std;

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

int st[100005], vf;
int prec[100005];
int v[100005];

int main()
{
    int N;

    fin >> N;

    for(int i = 1; i <= N; i++)
    {
        fin >> v[i];

        if(v[i] > v[st[vf]])
            st[++vf] = i, prec[i] = st[vf - 1];
        else
        {
            int l = 1, r = vf, mij = (l + r) / 2, poz = 1;

            while(l <= r)
            {
                if(v[st[r]] <= v[i])
                {
                    l = mij + 1;
                    poz = mij;
                }
                else
                    r = mij - 1;

                mij = (l + r) / 2;
            }

            st[poz] = i;
            prec[i] = st[poz - 1];
        }
    }

    fout << vf << '\n';

    vector <int> ans;

    int poz = st[vf];

    while(poz != 0)
    {
        ans.push_back(v[poz]);
        poz = prec[poz];
    }

    for(int i = vf - 1; i >= 0; i--)
        fout << ans[i] << " ";

    return 0;
}