Cod sursa(job #2570390)

Utilizator CarlaDianaCarla Diana CarlaDiana Data 4 martie 2020 16:34:41
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int n,a[100010],lmax,d[100010],poz[100010],v[100010],mij,st,dr;

void afis(int poz)
{
    if(poz!=0)
    {
        afis(d[poz]);
        fout<<a[poz]<<" ";
    }
}



int main()
{
    fin>>n;
    fin>>a[1];
    lmax=1;
    v[1]=a[1];
    poz[1]=1;
    for(int i=2;i<=n;i++)
    {
        fin>>a[i];
        if(a[i]>v[lmax])
        {
            lmax++;
            v[lmax]=a[i];
            poz[lmax]=i;
            d[i]=poz[lmax-1];
        }
        else
        {
            if(a[i]<=v[1])
            {
                v[1]=a[i];
                poz[1]=i;
                d[i]=0;
            }
            else
            {
                st=1;
                dr=lmax;
                while(dr-st>1)
                {
                    mij=(st+dr)/2;
                    if(v[mij]<a[i]) st=mij;
                    else dr=mij;
                }
                if(v[dr]>a[i])
                {
                    v[dr]=a[i];
                    poz[dr]=i;
                    d[i]=poz[dr-1];
                }
            }
        }
    }
    fout<<lmax<<'\n';
    afis(poz[lmax]);
    return 0;
}