Cod sursa(job #2972930)

Utilizator dobreraduDobre Radu Fabian dobreradu Data 30 ianuarie 2023 17:49:26
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int NMAX = 100001;
int v[NMAX], best[NMAX], rez[NMAX], father[NMAX];
int cautbin( int st, int dr, int e){
    int ans = 0;
    while(st <= dr){
        int mid = (st + dr)/2;
        if( v[best[mid]] < e ){
            st = mid + 1;
            ans = mid;
        }
        else
            dr = mid-1;
    }
    return ans;
}
int main()
{
    int n, max_best = 0;
    in >> n;
    for( int i = 1 ; i <= n ; i++ ){
        in >> v[i];
        int poz = cautbin(1, max_best, v[i])+1;
        best[poz] = i;
        max_best = max( poz, max_best );
        father[i] = best[poz - 1];
    }
    out << max_best << endl;
    int p = best[max_best], cnt = 0;
    while(p){
        rez[++cnt] = v[p];
        p = father[p];
    }
    for( int i = cnt; i > 0 ; i-- )
        out << rez[i] << " ";
    return 0;
}