Cod sursa(job #2476220)

Utilizator PredescuSebastianIonPredescu Sebastian Ion PredescuSebastianIon Data 18 octombrie 2019 13:43:24
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 a[100005],b[100005],n,i,poz,lung[100005],sol;
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 && sol; j--)
    {
        if (lung[j]==sol && a[j]<=a[k])
        {
            sol--;
            drum(j);
            g<<a[j]<<" ";
        }
    }
}
int k;
int main()
{
    f>>n;
    for (i=1; i<=n; i++)
    {
        f>>a[i];
    }
    for (i=1; i<=n; i++)
    {
        b[i]=2000000005;
    }
    for (i=1; i<=n; i++)
    {
        poz=cautbin(a[i]);
        if (a[i]<b[poz+1])
        {
            b[poz+1]=a[i];
            lung[i]=poz+1;
        }
        if (lung[i]>sol)
        {
            sol=lung[i];
            k=i;
        }
    }
    g<<sol<<'\n';
    drum(k);
    return 0;
}