Cod sursa(job #2572969)

Utilizator levladiatorDragutoiu Vlad-Ioan levladiator Data 5 martie 2020 15:14:01
Problema Subsir crescator maximal Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>
#define NMAX 100005
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");

int n,v[NMAX],best[NMAX],l[NMAX],p[NMAX],poz,maxim,nr;

void afis(int i)
{
    if(p[i]>0)afis(p[i]);
        fout<<v[i]<<" ";
}
int caut(int x)
{
    int st,dr,mij;
    st=1;
    dr=nr;
    mij=(st+dr)/2;
    while(st<=dr)
    {
        if(v[l[mij]]<x&&v[l[mij+1]]>=x)return mij;
        else if(v[l[mij+1]]<x){st=mij+1;mij=(st+dr)/2;}
        else {dr=mij-1;mij=(st+dr)/2;}
    }
    return nr;
}
int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)
    {
        fin>>v[i];
    }
    best[1]=l[1]=1;
    nr=1;
    for(int i=2;i<=n;i++)
    {
        poz=caut(v[i]);
        p[i]=l[poz];
        best[i]=poz+1;
        l[poz+1]=i;
        if(nr<poz+1)nr=poz+1;
    }
    for(int i=1;i<=n;i++)
    {
        if(best[i]>maxim)
        {
            maxim=best[i];
            poz=i;
        }
    }
    fout<<maxim<<'\n';
    afis(poz);
}