Cod sursa(job #2965500)

Utilizator AnSeDraAndrei Sebastian Dragulescu AnSeDra Data 15 ianuarie 2023 14:26:54
Problema Subsir crescator maximal Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>

using namespace std;

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

const int Nmax = 100001;
const int ValMax = 2000000000;

int v[Nmax], s[Nmax], prv[Nmax];

int binarySearch(int start, int finish, int index){
    int mid, sol;

    sol = -1;
    while(start <= finish){
        mid = (start + finish) / 2;

        if(v[index] <= v[s[mid]]){
            sol = mid;
            finish = mid - 1;
        }
        else{
            start = mid + 1;
        }
    }

    return sol;
}

int main()
{
    int n, lenmax, index;

    fin >> n;

    for(int i = 0; i < Nmax; i++){
        s[i] = Nmax - 1;
    }
    v[Nmax - 1] = ValMax;

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

        index = binarySearch(0, lenmax, i);
        if(s[index] == Nmax - 1){
            lenmax++;
        }
        s[index] = i;
    }

    fout << lenmax << '\n';

    for(int i = 0; i < lenmax; i++){
        fout << v[s[i]] << " ";
    }

    return 0;
}