Cod sursa(job #2063113)

Utilizator stefantagaTaga Stefan stefantaga Data 11 noiembrie 2017 09:35:13
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>

using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n;int b[100001],a[100001],l[100001],lmax;int k;
int caut(int x)
{
    int m,p=1,u=n;
    while (p<=u)
    {
        m=(p+u)/2;
        if (x>b[m])
        {
            p=m+1;
        }
        else
        {
            u=m-1;
        }
    }
    return u;
}
void solve()
{
    int i,poz;
    for (i=1;i<=n;i++)
    {
        poz=caut(a[i]);
        if (a[i]<b[poz+1])
        {
            b[poz+1]=a[i];
            l[i]=poz+1;
        }
        if (l[i]>lmax)
        {
            lmax=l[i];
            k=i;
        }
    }
}
void drum(int k)
{
    int j;
    for (j=k;j>=1&&lmax;j--)
    {
        if (l[j]==lmax&&a[j]<=a[k])
        {

            lmax--;
            drum(j); g<<a[j]<<" ";
        }
    }
}
int main()
{
    int i;
    f>>n;
    for (i=1;i<=n;i++)
    {
        f>>a[i];
        b[i]=2000000001;
    }
    solve();
    g<<lmax<<'\n';
    drum(k);
    return 0;
}