Cod sursa(job #2798493)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 11 noiembrie 2021 13:02:55
Problema Subsir crescator maximal Scor 95
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <bits/stdc++.h>

using namespace std;

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

const int DIM = 200005;

map <int, int> tata;
int m, dp[DIM];
int n, k, st, md, dr;

void drum(int crt){
    if(crt != 0){
        drum(tata[crt]);
        fout<<crt<<" ";
    }
}

int main (){
    fin>>n;
    for(int i=1; i<=n; i++){
        fin>>k;
        st=1;
        dr=m;
        while(st <= dr){
            md = (dr-st)/2+st;

            if(dp[md] >= k)
                dr=md-1;
            else
                st=md+1;
        }

        if(st > m)
            m++;

        tata[k] = dp[st-1];
        dp[st] = k;
    }

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