Cod sursa(job #1981500)

Utilizator CriistinaMicula Cristina Criistina Data 15 mai 2017 21:14:06
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <fstream>
#define Nmax 100001

using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");

int n, v[Nmax], l[Nmax], best[Nmax], pr[Nmax], nr, k,poz;

int cautare_binara(int x)
{
    int st=0, 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]]>=x)
        {
            dr=mij-1;
            mij=(st+dr)/2;
        }
        else
        {
            st=mij+1;
            mij=(st+dr)/2;
        }
    }
    return nr;
}
void afis(int i)
{
    if(pr[i]>0)
        afis(pr[i]);
    g<<v[i]<<" ";
}
int main()
{
    f>>n;
    for(int i=1;i<=n;i++)
        f>>v[i];
    best[1]=l[1]=1;
    nr=1;
    for(int i=2;i<=n;i++)
    {
        poz=cautare_binara(v[i]);
        pr[i]=l[poz];
        l[poz+1]=i;
        best[i]=poz+1;
        if(nr<poz+1)
            nr=poz+1;
    }
    k=0; poz=0;
    for(int i=1;i<=n;i++)
    {
        if(k<best[i])
        {
            k=best[i];
            poz=i;
        }
    }
    g<<k<<'\n';
    afis(poz);
    return 0;
}