Cod sursa(job #1627703)

Utilizator Tuddy18Tolciu Tudor Tuddy18 Data 3 martie 2016 18:26:17
Problema Subsir crescator maximal Scor 5
Compilator cpp Status done
Runda Arhiva educationala Marime 2.27 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");

int n,total_maximum;
vector <int> decimal_array;
vector <int> work_vector;

int binar_find_smallest_number_greater_than(int vector_begin, int vector_end, int number)
{
    if(vector_begin==vector_end)
    {
        return vector_begin;
    }
    /*if(vector_begin+1==vector_end)
    {
        if(number>=work_vector[vector_begin])
        {
            return vector_end;
        }
        else
        {
            return vector_begin;
        }
    }*/
    else
    {
        if(number<work_vector[vector_begin+vector_end/2])
        {
            binar_find_smallest_number_greater_than(vector_begin,vector_begin+vector_end/2,number);
        }
        if(number>work_vector[vector_begin+vector_end/2])
        {
             binar_find_smallest_number_greater_than(vector_begin+vector_end/2+1,vector_end,number);
        }
        if(number==work_vector[vector_begin+vector_end/2])
        {
            return vector_begin+vector_end/2;
        }
    }
}

int find_smallest_number_greater_than(int number)
{
    for(int i=1;i<work_vector.size();i++)
    {
        if(number<work_vector[i])
        {
            return i;
        }
    }
}

void find_maximal_ascending_chain(int n)
{

    int maximum=0;

    work_vector.resize(0);
    work_vector.push_back(-1);

    for(int i=0;i<n;i++)
    {
        if(decimal_array[i]>work_vector[work_vector.size()-1])
        {
            work_vector.push_back(decimal_array[i]);
        }
        else
        {
            int substitution_pos=binar_find_smallest_number_greater_than(1,work_vector.size()-1,decimal_array[i]);
            //int substitution_pos=find_smallest_number_greater_than(decimal_array[i]);
            work_vector[substitution_pos]=decimal_array[i];
        }
    }
}

int main()
{
    fin>>n;
    decimal_array.resize(n);

    for(int i=0;i<n;i++)
    {
        fin>>decimal_array[i];
    }

    find_maximal_ascending_chain(n);

    //fout<<total_maximum<<endl<<0;

    fout<<work_vector.size()-1<<endl;

   /* for(int i=1;i<work_vector.size();i++)
    {
        fout<<work_vector[i]<<" ";
    }*/
    return 0;
}