Cod sursa(job #2216793)

Utilizator alexsandulescuSandulescu Alexandru alexsandulescu Data 27 iunie 2018 22:21:09
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>

using namespace std;

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

int N, Nq, Npoz, s, last, startPoz, a[100003], q[100003], sol[100003], poz[100003];

void put(int x, int i) {
    int st = 1, dr = Nq;

    while(st <= dr) {
        int mij = (st + dr) / 2;
        if(x <= q[mij])
            dr = mij - 1;
        else
            st = mij + 1;
    }

    q[st] = x;
    poz[++Npoz] = st;

    if(Nq < st) {
        Nq = st;
        sol[(s = 1)] = last = x;
        startPoz = i;
    }
}
int main() {

    f >> N;
    for(int i = 1; i <= N; i++) {
        f >> a[i];
        put(a[i], i);
    }
    g << Nq << "\n";
    Nq--;
    for(int i = startPoz; i >= 1 && Nq >= 1; i--) {
        if(Nq == poz[i] && last > a[i]) {
            sol[++s] = last = a[i];
            Nq--;
        }
    }

    for(int i = s; i >= 1; i--)
        g << sol[i] << " ";

    g << "\n";
    return 0;
}