Cod sursa(job #2648367)

Utilizator rARES_4Popa Rares rARES_4 Data 10 septembrie 2020 13:31:24
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <fstream>
#include <iostream>
#include <stack>
using namespace std ;
ifstream f ("scmax.in") ;
ofstream g ("scmax.out");
stack<int> rasp;
int n,mx_rasp = 1,v[100002],vector_final[100002],poz_in_vector_final[100002];
int cautare_binara(int nr,int lungime)
{
    int st = 1,dr =lungime,mij,rasp =lungime+1;
    while(st<=dr)
    {
        mij = (st+dr)/2;
        if(vector_final[mij]>=nr)
        {
            rasp = mij;
            dr = mij - 1;
        }
        else
            if(vector_final[mij]<nr)
            st = mij +1;
    }
    return rasp;
}
void afisare(int nr,int poz)
{
    if(nr == 0)
        return ;
    for(int i = poz;;i--)
    {
        if(poz_in_vector_final[i] == nr)
        {
            afisare(nr-1,i-1);
            g << v[i]<< " ";
            return;
        }
    }
}
int main()
{
    f >> n;
    for(int i = 1; i<=n; i++)
    {
        f >> v[i];
    }
    int lungime = 1;
    vector_final[1] = v[1];
    poz_in_vector_final[1] = 1;
    for(int i = 2;i<=n;i++)
    {
        int loc_in_vector_final = cautare_binara(v[i],mx_rasp);
        mx_rasp = max(mx_rasp,loc_in_vector_final);
        vector_final[loc_in_vector_final] = v[i];
        poz_in_vector_final[i] = loc_in_vector_final;

    }
    g<< mx_rasp<< endl;
    afisare(mx_rasp,n);
    return 0 ;
}