Cod sursa(job #2671082)

Utilizator rares404AlShaytan - Balasescu Rares rares404 Data 11 noiembrie 2020 14:13:11
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
	
#include <iostream>
#include <fstream>
 
using namespace std;
 
ifstream f("scmax.in");
ofstream g("scmax.out");
 
int a[100005], v[100005], p[100005], n,lgv;
 
void citire()
{
    f>>n;
    for(int i=1; i<=n; i++)
        f>>a[i];
}
 
int caut_binar(int x) //cel mai mic nr mai mare sau egal cu x
{
    int st=1, dr=lgv, mij;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(x<=v[mij])
            dr=mij-1;
        else
            st=mij+1;
    }
    return st;
}
 
void cautare()
{
    for(int i=1; i<=n; i++)
    {
        p[i]=caut_binar(a[i]);
        v[p[i]]=a[i];
        if(p[i]>lgv)
            lgv++;
    }
}
 
void afisare(int lg, int poz)
{
    if(lg==0)
        return;
    for(int i=poz; i>=1; i--)
    {
        if(p[i]==lg)
        {
            afisare(lg-1, i-1);
            g<<a[i]<<' ';
            break;
        }
    }
}
 
int main()
{
    citire();
    cautare();
    g<<lgv<<'\n';
    afisare(lgv, n);
    return 0;
}