Cod sursa(job #2170577)

Utilizator SolcanMihaiSolcan Mihai Andrei SolcanMihai Data 15 martie 2018 08:39:44
Problema Componente tare conexe Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

int sirx[100005];
int sir[100005];
int sirxx[100005];
int l;
vector<int> sol;

bool cmp(int x, int y){
    if(x <= y){
        return true;
    }
    return false;
}

void add(int x, int nr){
    auto y = upper_bound(sir, sir + l, x, cmp);

    if(y != sir + l){
        int poz = y - sir;
        sir[poz] = x;
        sirx[nr] = poz;
    }
    else{
        sirx[nr] = l;
        sir[l] = x;
        l++;
    }
}

int main()
{
    freopen("scmax.in", "r", stdin);
    freopen("scmax.out", "w", stdout);

    int n, x;

    scanf("%d", &n);

    for(int i = 0; i < n; i++){
        scanf("%d", &x);
        sirxx[i] = x;
        add(x, i);
    }

    printf("%d\n", l);
    l--;

    int ll = 0;

    for(int i = n - 1; i >= 0; i--){
        if(sirx[i] == l){
            sol.push_back(sirxx[i]);
            l--;
            ll++;
        }
    }

    for(int i = ll - 1; i >= 0; i--){
        printf("%d ", sol[i]);
    }

    return 0;
}