Cod sursa(job #2685686)

Utilizator XeinIonel-Alexandru Culea Xein Data 17 decembrie 2020 15:46:39
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>

#define NMAX 100001

std::ifstream f("scmax.in");
std::ofstream g("scmax.out");
int N, Arr[NMAX], Arr_Asc[NMAX], Prev[NMAX], Index[NMAX], Len = 1;

void Path(int i)
{
    if(Prev[i] != 0)
        Path(Prev[i]);
    g << Arr[i] << ' ';
}

int main()
{
    f >> N;
    for(int i = 1; i <= N; i++)
        f >> Arr[i];
    f.close();

    Arr_Asc[1] = Arr[1];
    Index[1] = 1;
    for(int i = 2; i <= N; i++)
    {
        if(Arr[i] > Arr_Asc[Len])
        {
            Arr_Asc[++Len] = Arr[i];
            Prev[i] = Index[Len - 1];
            Index[Len] = i;
        }
        else
        {
            int l = 0, r = Len;
            while(l < r - 1)
            {
                int m = (l + r) / 2;
                if(Arr_Asc[m] >= Arr[i])
                    r = m;
                else
                    l = m;
            }
            Arr_Asc[r] = Arr[i];
            Prev[i] = Index[l];
            Index[r] = i;
        }
    }
    g << Len << '\n';
    Path(Index[Len]);
    return 0;
}