Cod sursa(job #2289226)

Utilizator iarinatudorTudor Iarina Maria iarinatudor Data 24 noiembrie 2018 11:58:20
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,a[100005];
int el[100005];
int poz[100005];
void citire()
{
    fin>>n;
    for(int i=1; i<=n; i++)
            fin>>a[i];
}
int bsc1(int st, int dr, int i)
{
   if(st==dr)
        return st;
    int m=(dr+st)/2;
    if(el[m]<i) return bsc1(m+1,dr,i);
    return bsc1(st,m,i);
}
void rezolva()
{
        int p,k=1;
        el[1]=a[1];
        poz[1]=1;
        int lgmax1=1;
        for(int i=2; i<=n; i++)
        {
                p=0;
                if(a[i]>el[k])
                {
                    k++;
                    el[k]=a[i];
                    p=k;
                }
                else
                {
                    p=bsc1(1,k,a[i]);
                    el[p]=a[i];
                    if(p>k)
                        k=p;

                }
                 poz[i]=p;
                    if(lgmax1<p)
                        lgmax1=p;
        }

    fout<<lgmax1<<"\n";
    k=1;
    for(int i=n; i>=1; i--)
        if(poz[i]==lgmax1)
        {
            el[k++]=a[i];
            lgmax1--;
        }
    for(int i=k-1; i>=1; i--)
        fout<<el[i]<<" ";
}

int main()
{
    citire();
    rezolva();
    return 0;
}