Cod sursa(job #2376706)

Utilizator AlexTudorAlex Brinza AlexTudor Data 8 martie 2019 17:10:10
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");

const int NMAX=100005;
const int INF=2000000000;

int aux[NMAX],prec[NMAX],a[NMAX];

int N,last;

int BS(int st , int dr , int val)
{
    if(st>dr) return 0;

    int mid=(st+dr)/2;

    if(val>a[aux[mid]]) return max(mid,BS(mid+1,dr,val));
    else return BS(st,mid-1,val);
}

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

void read()
{
    fin>>N;

    for(int i=1;i<=N;++i)
    {
        fin>>a[i];
    }

    last=0;
    aux[0]=0;
    a[0]=-INF;
    a[N+1]=INF;

    for(int i=1;i<=N;++i)
        if(a[i] > a[aux[last]])
            {
                aux[++last]=i;
                prec[i]=aux[last-1];
            }
        else
            {
                int poz=BS(1,last,a[i]);

                prec[i]=aux[poz];
                aux[poz+1]=i;
            }

    fout<<last<<"\n";

    print(aux[last]);

}

int main()
{
    read();
    return 0;
}