Cod sursa(job #3274009)

Utilizator Robert_NicuNicu Robert Cristian Robert_Nicu Data 4 februarie 2025 19:22:14
Problema Subsir crescator maximal Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>
#define DIM 100001
using namespace std;

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

int n, x, len;

int i, j;

int v[DIM], best[DIM], l[DIM];

stack <int> ans;

int cb(int st, int dr, int target){

    int ret = 0;

    while(st <= dr){

        int mij = (st + dr) / 2;

        if(best[mij] > target){

            dr = mij - 1;

            ret = mij;

        }else st = mij + 1;

    }

    return ret;

}

int main(){

    fin >> n;

    for(i = 1; i <= n; i++){

        fin >> x;

        v[i] = x;

        if(best[len] < x){

            best[++len] = x;

            l[i] = len;

        }else{

            int poz = cb(1, len, x);

            best[poz] = x;

            l[i] = poz;

        }

    }

    fout << len << "\n";

    for(i = n; i > 0; i--)

        if(l[i] == len){

            ans.push(v[i]);

            len--;

        }

    while(!ans.empty()){

        fout << ans.top() << " ";

        ans.pop();

    }

}