Cod sursa(job #2485968)

Utilizator m4t31Prodan Radu Matei m4t31 Data 2 noiembrie 2019 10:55:35
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, a[1000005];
int v[1000005], p[1000005];
int lgmax, pozmax, m=1;
int k=0;
int caut_bin(int st, int dr, int x)
{
    if(st==dr)
        return st;
    int mij=(st+dr)/2;
    if(v[mij]==x)
        return mij;
    if(v[mij]<x)
        st=mij+1;
    else
        dr=mij;
    return caut_bin(st, dr, x);
}
void rezolvare()
{
    v[0]=a[0];
    for(int i=1; i<n; i++)
    {
        int poz;
        if(a[i]>v[m-1])
        {
            poz=m;
            m++;
        }
        else
            poz=caut_bin(0, m-1, a[i]);
        v[poz]=a[i];
        p[i]=poz;
        if(poz>lgmax)
        {
            lgmax=poz;
            pozmax=i;
        }
    }
}
void afisare()
{
    g<<lgmax+1<<'\n';
    for(int i=pozmax;i>=0,lgmax>=0;i--)
        if(p[i]==lgmax)
        {
            lgmax--;
            v[k++]=a[i];
        }
    for(int i=k-1; i>=0; i--)
        g<<v[i]<<' ';
}
int main()
{
    f>>n;
    for(int i=0; i<n; i++)
        f>>a[i];
    rezolvare();
    afisare();
    return 0;
}