Cod sursa(job #3154485)

Utilizator DajaMihaiDaja Mihai DajaMihai Data 4 octombrie 2023 20:21:21
Problema Subsir crescator maximal Scor 35
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>

using namespace std;

int n;
int dp[100000];
int v[100000];

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

int main()
{
    in >> n;
    for(int i = 0; i < n; i ++){
        in >> v[i];
    }

    int dpPos = 1;

    dp[0] = v[0];

    for(int i = 1; i < n; i ++){
            //cout << dp[dpPos - 1] << " " << v[i] << endl;
        if(dp[dpPos - 1] < v[i]){
            dp[dpPos] = v[i];
            dpPos ++;
        }
        else{
            int l = 0,r = dpPos - 1;
            while(l != r){
                int mij = (l + r) / 2;
                if(v[i] >= dp[mij]){
                    l = mij + 1;
                }
                else if(v[i] <= dp[mij]){
                    r = mij;
                }
                cout << l << " " << r << endl;
            }
            dp[r] = v[i];
        }
    }

    out << dpPos << endl;
    for(int i = 0; i < dpPos; i ++){
        out << dp[i] << " ";
    }
    return 0;
}