Cod sursa(job #2342488)

Utilizator Anastasia11Susciuc Anastasia Anastasia11 Data 12 februarie 2019 21:03:18
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <fstream>
#define Nmax 100005

using namespace std;

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

int n;
int a[Nmax], best[Nmax], pre[Nmax], sol[Nmax];

int main()
{
    f >> n;
    for (int i = 1; i <= n; i++)
        f >> a[i];

    best[1]=1;
    int k=1;
    for (int i = 2; i <= n; i++)
    {
        int st=1, dr=k, mj=0;
        while(st <= dr)
        {
            mj=(st+dr)/2;
            if(a[best[mj]] < a[i])
                st=mj+1;
            else dr=mj-1;
        }
        if(st>k)
            k++;
        best[st]=i;
        pre[i]=best[st-1];
    }
    g << k << '\n';

    int i=best[k], j=0;
    while(i!=0)
    {
        sol[++j]=i;
        i=pre[i];
    }
    for (int i = k; i >= 1; i--)
      g << a[sol[i]] << " " ;

    return 0;
}