Cod sursa(job #1693055)

Utilizator LittleWhoFeraru Mihail LittleWho Data 22 aprilie 2016 12:21:38
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>

using namespace std;

int my_bsearch(int v[], int key, int l, int r)
{
    while (r - l > 1) {
        int m = l + (r - l) / 2;
        if (v[m] >= key)
            r = m;
        else
            l = m;
    }
    return r;
}

int main()
{
    ifstream in("scmax.in");
    ofstream out("scmax.out");
    
    int n;
    in >> n;
    
    int nums[n];
    for (int i = 0; i < n; i++) {
        in >> nums[i];
    }
    
    int len = 1;
    int seqTable[n];
    memset(seqTable, n, 0);
    seqTable[0] = nums[0];
    
    for (int i = 1; i < n; i++) {
        if (nums[i] < seqTable[0])
            seqTable[0] = nums[i];
        else if (nums[i] > seqTable[len - 1])
            seqTable[len++] = nums[i];
        else
            //int ix = my_bsearch(seqTable, nums[i], -1, len - 1);
            seqTable[my_bsearch(seqTable, nums[i], -1, len - 1)] = nums[i];
    }
    
    out << len << "\n";
    for (int i = 0; i < len; i++) {
        out << seqTable[i] << " ";
    }
    
    in.close();
    out.close();
    return 0;
}