Cod sursa(job #3149099)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 6 septembrie 2023 13:53:59
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>
#pragma GCC optimize ("Ofast")
#pragma GCC target ("popcnt")

using namespace std;

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

const int MAX_N = 100'000;
const int LIM = 2'000'000'000;

int n, v[MAX_N + 5];
int m, height[MAX_N + 5], index[MAX_N + 5], parent[MAX_N + 5];
int st, md, dr, save;

inline void drum(int i){
    if(i != 0){
        drum(parent[i]);
        fout<<v[i]<<" ";
    }
    return;
}

int main (){
    ios_base::sync_with_stdio(false);
    fin.tie(nullptr), fout.tie(nullptr);

    fin>>n;
    for(int i=1; i<=n; i++)
        fin>>v[i];

    m = 0;
    height[0] = 0;
    for(int i=1; i<=n; i++){
        st = 0;
        dr = m;
        while(st <= dr){
            md = (st + dr) / 2;
            if(height[md] < v[i]){
                save = md;
                st = md + 1;
            }else{
                dr = md - 1;
            }
        }

        height[save+1] = v[i];
        index[save+1] = i;
        parent[i] = index[save];
        if(save == m)
            m++;
    }

    fout<<m<<"\n";
    drum(index[m]);
    return 0;
}