Cod sursa(job #1897033)

Utilizator HuskyezTarnu Cristian Huskyez Data 1 martie 2017 09:12:58
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>
#include <algorithm>

#define infile "scmax.in"
#define outfile "scmax.out"

using namespace std;

ifstream in(infile);
ofstream out(outfile);

int n;
int sir[100001];
int a[100000];
int b[100000];
int lung_a = 0;
int scmax[10000];

void ceva(int pos)
{
    int val = sir[pos];
    if(val > a[lung_a]){
        lung_a++;
        a[lung_a] = val;
        b[pos] = lung_a;
    }else{
        int *up = upper_bound(a+1, a+lung_a+1, val);
        a[up-a] = val;
        b[pos] = up-a;
    }
}

int main()
{
    in >> n;
    for(int i=1; i<=n; i++){
        in >> sir[i];
    }

    a[1] = sir[1];

    for(int i=1; i<=n; i++){
        ceva(i);
    }

    out << lung_a << '\n';
    int lung = lung_a;

    scmax[lung] = a[lung];
    lung--;
    for(int i=n; i; i--){
        if(b[i] == lung){
            if(sir[i] < scmax[lung+1]){
                scmax[lung] = sir[i];
                lung--;
            }
        }
    }

    for(int i=1; i<=lung_a; i++){
        out << scmax[i] << ' ';
    }

    return 0;
}