Cod sursa(job #2714067)

Utilizator AndiAndi39Sabo Andrei Claudiu AndiAndi39 Data 1 martie 2021 11:37:58
Problema Subsir crescator maximal Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include<iostream>
#include<fstream>

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

#define nrm 100005
int n,v[nrm],scmax=0;
int rez[nrm];

int cautarebinara(int right, int e, int rez[])
{
    int left=1;
    while(left<=right)
    {
        int middle=(left+right)/2;
        if(e>rez[middle])
        {
            left=middle+1;
        }
        else
        {
            if(e>rez[middle])
            {
                right=middle-1;
            }
            else
            {
                return left;
            }
        }
    }
}

void citire()
{
    fin>>n;
    for(int i=1;i<=n;i++)
    {
        fin>>v[i];
        if(v[i]>rez[scmax])
        {
            scmax++;
            rez[scmax]=v[i];
        }
        else
        {
            int position=cautarebinara(scmax,v[i],rez);
            if(v[i]<rez[position])
            {
                rez[position]=v[i];
            }
        }
    }
}

void afisare()
{
    fout<<scmax<<'\n';
    for(int i=1;i<=scmax;i++)
    {
        fout<<rez[i]<<" ";
    }
}

int main ()
{
    citire();
    afisare();
    fin.close();
    fout.close();
    return 0;
}