Cod sursa(job #2562248)

Utilizator DanSDan Teodor Savastre DanS Data 29 februarie 2020 13:03:33
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <iostream>

#include <fstream>

#include <stack>



using namespace std;



ifstream in("scmax.in");

ofstream out("scmax.out");



const int MAX=1e6+1;

int v[MAX], n, lg[MAX], lgmax;

int pre[MAX];





int main()

{

    in>>n;

    for(int i=1; i<=n; i++)

        in>>v[i];

    for(int i=1; i<=n; i++)

    {

        int st = 1, dr = lgmax;

        while(st<=dr)

        {

            int mijl = (st+dr)/2;

            if(v[lg[mijl]] < v[i])

                st = mijl+1;

            else dr = mijl-1;

        }

        if(st>lgmax)

            lgmax = st;

        lg[st] = i;

        pre[i] = lg[dr];

    }

    stack<int> s;

    int poz = lg[lgmax];

    while(poz!=0)

    {

        s.push(v[poz]);

        poz = pre[poz];

    }

    out<<lgmax<<'\n';

    while(!s.empty())

    {

        out<<s.top()<<' ';

        s.pop();

    }

    return 0;

}