Cod sursa(job #2208415)

Utilizator LivcristiTerebes Liviu Livcristi Data 29 mai 2018 18:28:08
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include <vector>
#include <fstream>
#define NUM 100005
int v[NUM];
int n, lng;
using namespace std;
vector<int> ind_ult(NUM, 0);
vector<int> ind_prec(NUM, -1);
ofstream g("scmax.out");
int Ceil(int st, int dr, int num)
{
    while (dr - st > 1)
    {
        int m = st + (dr - st) / 2;
        if (v[ind_ult[m]] >= num)
            dr = m;
        else
            st = m;
    }
    return dr;
}
void afis(int i)
{
    if(i >= 0 && i < n)
    {
        afis(ind_prec[i]);
        g << v[i] << " ";
    }
}
int main()
{
    ifstream f("scmax.in");
    f >> n;
    for(int i = 0; i < n; ++i)
        f >> v[i];
    lng = 1;
    for (int i = 1; i < n; i++)
    {
        if (v[i] < v[ind_ult[0]])
        {
            ind_ult[0] = i;
        }
        else if (v[i] > v[ind_ult[lng-1]])
        {
            ind_prec[i] = ind_ult[lng-1];
            ind_ult[lng++] = i;
        }
        else
        {
            int pos = Ceil(-1, lng-1, v[i]);

            ind_prec[i] = ind_ult[pos-1];
            ind_ult[pos] = i;
        }
    }
    g << lng << "\n";
    afis(ind_ult[lng - 1]);
    g << "\n";
    f.close();
}