Cod sursa(job #1897077)

Utilizator HuskyezTarnu Cristian Huskyez Data 1 martie 2017 09:46:12
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 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[100001];
int b[100001];
int lung_a = 0;
int scmax[10000];

void ceva(int pos)
{
    int val = sir[pos];
    if(binary_search(a+1, a+lung_a+1, val))
        return;
    if(val > a[lung_a]){
        cout << a[lung_a] << '-'<<val << "   ";
        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;
}