Cod sursa(job #1968368)

Utilizator waren4Marius Radu waren4 Data 17 aprilie 2017 17:28:07
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

int n, nr, st, dr, a[100005], b[100005], c[100005];

int cautbin(int x){
    int mij, last = nr + 1;
    while (st <= dr) {
        if (x <= b[mij]) {
            last = mij;
            st = mij + 1;
        }
        else {
            dr = mij - 1;
        }
    }
    return last;
 }
int main(){
    int i;
    f>>n;
    nr = 0;
    for(i = 1; i <= n; ++i) {
        f>>a[i];
    }
    for(i = 1; i <= n; ++i) {
        st = 1;
        dr = nr;
        int p = cautbin(a[i]);
        if (p == nr + 1) {
            ++nr;
        }
        b[p] = a[i];
        c[i] = p;
    }
    int j = n;
    for(i = nr; i >= 1; ++i) {
        do {
            if (c[j] == i) {
                b[i] = a[j];
            }
            else {
                --j;
            }
        } while(c[j] != i);
    }
    g<<nr<<'\n';
    for(i = 1; i <= nr; ++i) {
        g<<b[i]<<' ';
    }
    return 0;
}