Cod sursa(job #2176050)

Utilizator SaphyrosMarcus Sergiu David Saphyros Data 16 martie 2018 20:38:04
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>

#define N_MAX 100005

using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");

int n, arr[N_MAX], lsi[N_MAX], p[N_MAX];

int binarySearch(int low, int high);
void solve();

int main()
{
    fin >> n;
    for (int i = 0; i < n; i++)
        fin >> arr[i];

    solve();

    return 0;
}

int binarySearch(int low, int high, int x)
{
    if (high >= low)
    {
        int mid = low + (high - low) / 2;
        if (arr[mid] == x)
            return mid;
        if (arr[mid] > x)
            return binarySearch(low, mid-1, x);
        return binarySearch(mid+1, high, x);
    }

    return -1;
}

void solve()
{
    int len = 0;
    for (int i = 0; i < n; i++)
    {
        int pos = binarySearch(0, n-1, arr[i]);
        // update parent for lis
        p[i] = lsi[pos-1];
        // replace or append
        lsi[pos] = i;

        if (pos > len)
            len = pos;
    }
    fout << len-1 << "\n";
}