Cod sursa(job #2352188)

Utilizator stefantagaTaga Stefan stefantaga Data 23 februarie 2019 07:45:06
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>

using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int v[100005],b[100005],n,i,poz,lung[100005],maxim;
int cautbin (int x)
{
    int st=1,dr=n,mij;
    while (st<=dr)
    {
        mij=(st+dr)/2;
        if (x>b[mij])
        {
            st=mij+1;
        }
        else
        {
            dr=mij-1;
        }
    }
    return dr;
}
void drum (int k)
{
    int j;
    for (j=k;j>=1&&maxim;j--)
    {
        if (lung[j]==maxim&&v[j]<=v[k])
        {
            maxim--;
            drum(j);
            g<<v[j]<<" ";
        }
    }
}int k;
int main()
{
    f>>n;
    for (i=1;i<=n;i++)
    {
        f>>v[i];
    }
    for (i=1;i<=n;i++)
    {
        b[i]=2000000005;
    }
    for (i=1;i<=n;i++)
    {
        poz=cautbin(v[i]);
        if (v[i]<b[poz+1])
        {
            b[poz+1]=v[i];
            lung[i]=poz+1;
        }
        if (lung[i]>maxim)
        {
            maxim=lung[i];
            k=i;
        }
    }
    g<<maxim<<'\n';
    drum(k);
    return 0;
}