Cod sursa(job #2525201)

Utilizator CarlaDianaCarla Diana CarlaDiana Data 16 ianuarie 2020 21:23:56
Problema Subsir crescator maximal Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int n,a[100010],v[100010],d[100010],poz[100010],lmax,st,dr,mi;
int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>a[i];
    v[1]=a[1];
    poz[1]=1;
    lmax=1;
    for(int i=2;i<=n;i++)
    {
        if(v[lmax]<a[i])
        {
            lmax++;
            v[lmax]=a[i];
            poz[lmax]=i;
            d[i]=poz[lmax-1];
        }
        else
        {
            if(a[i]<=v[1])
            {
                v[1]=a[i];
                d[i]=0;
                poz[1]=i;
            }
            else
            {
                st=1;dr=lmax;
                while(dr-st>1)
                {
                    mi=(st+dr)/2;
                    if(a[i]>v[mi]) st=mi;
                    else dr=mi;
                }
                if(a[i]<=v[dr])
                {
                    v[dr]=a[i];
                    poz[dr]=i;
                    d[i]=poz[dr-1];
                }
            }
        }
    }
    fout<<lmax<<'\n';

    return 0;
}