Cod sursa(job #934590)

Utilizator repp4raduRadu-Andrei Szasz repp4radu Data 30 martie 2013 20:22:45
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>

#define MAX 100005

using namespace std;

int N, NPoz, step, V[MAX], ans[MAX];

void citire() {
    ifstream in("scmax.in");
    in>>N;
    for(int i = 1; i <= N; i++) in>>V[i];
    in.close();
}

inline int searchPoz(int val) {
    int poz = 0;
    for(int st = step; st; st >>= 1) {
        if(st + poz <= NPoz && ans[st + poz] < val) poz += st;
    } return poz + 1;
}

void solve() {
    step = 1;
    for(int i = 1; i <= N; i++) {
        int poz = searchPoz(V[i]);
        if(poz > NPoz) {
            ans[++NPoz] = V[i];
            if(step << 1 == NPoz) step <<= 1;
        } else ans[NPoz] = min(ans[NPoz], V[i]);
    }
}

void afisare() {
    ofstream out("scmax.out");
    out<<NPoz<<"\n";
    for(int i = 1; i <= NPoz; i++)
        out<<ans[i]<<" ";
    out.close();
}

int main() {
    citire();
    solve();
    afisare();
    return 0;
}