Cod sursa(job #2190517)

Utilizator Narvik13Razvan Roatis Narvik13 Data 31 martie 2018 00:38:53
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#include <fstream>
#define NMAX 100002

using namespace std;

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

int n, ant[NMAX], val[NMAX], dp[NMAX], l;

void rec(int pos)
{
    if(pos)
    {
        rec(ant[pos]);
        o << val[pos] << ' ';
    }
}

int main()
{
    int st,dr,mij,pos;
    f >> n;
    f >> val[1];
    dp[1] = 1;
    ant[1] = 0;
    l = 1;

    for(int i = 2; i <= n; ++i)
    {
        f >> val[i];
        st = 0;
        dr = l;
        pos = -1;
        while(st <= dr)
        {
            int mij = (st + dr) / 2;
            if(val[dp[mij]] >= val[i])
            {
                dr = mij - 1;
            }
            else
            {
                pos = mij;
                st = mij + 1;
            }
        }

        dp[pos+1] = i;
        ant[i] = dp[pos];

        if(pos+1 > l)
            l = pos + 1;
    }

    o << l << '\n';

    rec(dp[l]);

    return 0;
}