Cod sursa(job #2250653)

Utilizator pinteastefanPintea Teodor Stefan pinteastefan Data 30 septembrie 2018 15:14:43
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>

using namespace std;

int values[100001];
int dp[100001], position[100001], sol[100001], lastEl[100001];
int final, size1 = 0;


int binarSearch(int x, int n){
    int position = 0;
    for (int power = 20; power >= 0 ; power --){
        if (position + (1 << power) <= n && dp[position + (1 << power)] < x){
            position += (1 << power);
        }
    }
    return position;
}

int main() {
    ifstream f("scmax.in");
    ofstream g("scmax.out");
    int n;
    f >> n;
    for (int i = 1; i <= n; i++){
        f >> values[i];
    }
    int bestRight = 0;
    for (int i = 1; i <= n; i++){
        final = binarSearch(values[i], bestRight);
        dp[final + 1] = values[i];
        position[final + 1] = i;
        lastEl[i] = position[final];
        bestRight = max(bestRight, final + 1);
    }
    g << bestRight << "\n";
    for (int i = 1; i <= bestRight; i++){
        g << dp[i] << " ";
    }
    return 0;
}