Cod sursa(job #3324755)

Utilizator vladduttMicodan Vladut vladdutt Data 23 noiembrie 2025 12:44:26
Problema Subsir crescator maximal Scor 45
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
/*
 * author : tenebris
*/
#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;

int binarySearch(vector<int> const& d, int x) {
    int left = 0, right = d.size() - 1, mid, pos = -1;
    while(left <= right)
    {
        mid = (left + right) / 2;
        if(d[mid] > x)
        {
            pos = mid;
            right = mid - 1;
        }
        else left = mid + 1;
    }
    return pos;
}

int lengthOfLIS(vector<int>& nums) {
    int n = nums.size();
    if(n == 0) return 0;
    vector<int> d;
    d.push_back(nums[0]);
    for(int i = 1; i < n; i++)
    {
        int x = nums[i];
        if(x >= d.back())
            d.push_back(x);
        else
        {
            int l = binarySearch(d, x);
            if(l != -1) d[l] = x;
        }
    }
    return d.size();
}

int main() 
{
    ifstream fin("scmax.in");
    ofstream fout("scmax.out");
    int n;
    fin >> n;
    vector<int> a(n);
    for(int i = 0; i < n; i++)
        fin >> a[i]; 
    fout << lengthOfLIS(a) << "\n";
    fin.close();
    fout.close();
}