Cod sursa(job #2344782)

Utilizator DariusDCDarius Capolna DariusDC Data 15 februarie 2019 17:04:13
Problema Subsir crescator maximal Scor 5
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>
#define MAX 100001

using namespace std;

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

int n;
int arr[MAX];
int lis[MAX];
int parent[MAX];

int len;

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

    len = 1;
    lis[1] = 1;
    parent[1] = -1;
    for (int i = 2; i <= n; i++)
    {
        if (arr[i] > arr[lis[len]])
        {
            parent[i] = lis[len];
            len++;
            lis[len] = i;
        }
        else if (arr[i] < arr[lis[1]])
        {
            parent[i] = -1;
            lis[1] = i;
        }
        else
        {
            int low = 1;
            int high = len;
            while (low <= high)
            {
                int mid = (low + high) / 2;
                if (arr[lis[mid]] < arr[i])
                    high = mid - 1;
                else
                    low = mid + 1;
            }
            lis[low] = i;
            parent[i] = lis[low - 1];
        }
    }
    fout << len;
    return 0;
}