Cod sursa(job #1822239)

Utilizator alinp25Alin Pisica alinp25 Data 4 decembrie 2016 16:15:36
Problema Subsir crescator maximal Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include <vector>
#include <fstream>


int binsrc(int n, std::vector<int> &vec, int start, int stop, int key) {
    int m;
    while (stop - start > 1) {
        m = start + (stop - start) / 2;
        if (vec[m] > key) {
            stop = m;
        } else {
            start = m;
        }
    }
    return stop;
}


int solve(int n, std::vector<int> &v) {
    if (v.size() == 0) {
        return -1;
    }

    int length = 1;
    std::vector<int> t(v.size(), 0);

    t[0] = v[0];
    for (size_t i = 1; i < v.size(); i++) {
        if (v[i] < t[0]) {
            t[0] = v[i];
        } else if (v[i] > t[length - 1]) {
            t[length++] = v[i];
        } else {
            t[binsrc(n, t, -1, length - 1, v[i])] = v[i];
        }
    }

    std::ofstream fout("scmax.out");
    fout << length << "\n";
    for (int i = 0; i < length; i++) {
        fout << t[i] << " ";
    }

    return length;
}


void read(int &n, std::vector<int> &v) {
    int aux;
    std::ifstream fin("scmax.in");

    fin >> n;
    for (size_t i = 0; i < n; i++) {
        fin >> aux;
        v.push_back(aux);
    }

    fin.close();
}


int main(int argc, char *argv[]) {
    int n;
    std::vector<int> v;
    read(n, v);
    solve(n, v);
    return 0;
}