Cod sursa(job #2706560)

Utilizator UnknownPercentageBuca Mihnea-Vicentiu UnknownPercentage Data 15 februarie 2021 12:17:29
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("scmax.in");
ofstream g("scmax.out");

int v[100001], p[100001], q[100001];
int n, l;

void print(int L, int ind){

    while(q[ind] != L) ind--;

    if(L - 1 > 0) print(L - 1, ind - 1);
    g << v[ind] << " ";
}
int main(){

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

    p[++l] = v[1], q[1] = 1;
    for(int i = 2;i <= n;i++){

        if(v[i] > p[l]) p[++l] = v[i], q[i] = l;
        else{

            int st = 1, dr = l, x = l;
            while(st <= dr){

                int mij = (st + dr) / 2;
                if(p[mij] >= v[i]) dr = mij - 1, x = mij;
                else st = mij + 1;
            }

            p[x] = v[i], q[i] = x;
        }
    }

    g << l << "\n";

    print(l, n);

}