Cod sursa(job #2209375)

Utilizator unknownpersonBidasca Carina Georgiana unknownperson Data 3 iunie 2018 10:43:56
Problema Subsir crescator maximal Scor 15
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<bits/stdc++.h>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int best[100003],a[100003], maxim,sol=0,poz[100003],p;
int n;
void read()
{
    f>>n;
    for(int i=1; i<=n; ++i)
        f>>a[i];
}
void dinamic()
{
    int i,st,dr,mi;
    best[1]=1;
    maxim=1;
    for(i=2;i<=n; i++)
    {
        if(a[i]>a[best[maxim]])
        {
            poz[i]=best[maxim];
            best[++maxim]=i;
            continue;
        }
        st=0;dr=maxim;
        while(dr-st>1)
        {
            mi=(st+dr)/2;
            if(a[i]>a[best[mi]])
                st=mi;
            else
                dr=mi;
        }
        best[dr]=mi;
        poz[i]=best[st];
    }
}
void afisare(int p)
{
    if(p==0)
        g<<maxim<<'\n';
    else
    {
        afisare(poz[p]);
        g<<a[p]<<' ';
    }
}
int main()
{
    read();
    dinamic();
    afisare(best[maxim]);
    return 0;
}