Cod sursa(job #3316112)

Utilizator zxc11Doru Mihai zxc11 Data 17 octombrie 2025 14:16:22
Problema Subsir crescator maximal Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;

const int NMAX = 1e5;

int v[NMAX], prev[NMAX + 5];

int scm[NMAX]; /// scm[i] = cea mai mica valoare cu care sa se termine sirul de lungime i

int main() {
    ifstream cin("scmax.in");
    ofstream cout("scmax.out");
    ios::sync_with_stdio(false), cin.tie(0);

    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> v[i];
    }

    scm[1] = v[1];
    for (int i = 2; i <= n; i++) {
        int st = 1, dr = n, r = -1;
        while (st <= dr) {
            int mid = (st + dr) / 2;
            if (v[i] > scm[mid] && scm[mid] != 0) {
                r = mid;
                st = mid + 1;
            }
            else dr = mid - 1;
        }
        if (r == -1) scm[1] = min(scm[1], v[i]);
        else scm[r + 1] = v[i];
    }

    int ans = 0;
    for (int i = 1; i <= n; i++)
        if (scm[i] > 0)
            ans = max(ans, i);

    cout << ans << '\n';
    return 0;
}