Cod sursa(job #2438889)

Utilizator marius0072scarlat marius stefan marius0072 Data 14 iulie 2019 11:53:31
Problema Subsir crescator maximal Scor 35
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <iostream>
#include <fstream>

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

const int NMAX = 10005;
int n,v[NMAX],dp[NMAX];

int binary(int left,int right,int *v,int value)
{
    while (left <= right)
    {
        int mid = (left + right) / 2;
        if(v[mid] < value)
            left = mid + 1;
        else right = mid - 1;
    }
    
    return left;
}

void lis()
{
    
    int len{};// len of the dp array
    
    for(int i = 1;i <= n;i++)
    {
        int pos = binary(1,len,dp,v[i]);
        if(pos > len)
            len = pos;
        dp[pos] = v[i];
    }
    g << len << '\n';
}

int main()
{
    
    f >> n;
    
    for(int i = 1;i <= n;i++)
        f >> v[i];
    
    lis();
    
    f.close();
    g.close();
    
    return 0;
}