Cod sursa(job #2572782)

Utilizator qThunderStefan Durlanescu qThunder Data 5 martie 2020 14:18:53
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int k,d[100004],l[100004],a[100004],ant[100004],n,p,lmax,pm;
int cautbin(int x)
{
    int p=1,u=k,mid;
    while(p<=u)
    {
        mid=(p+u)/2;
        if(a[d[mid]]>=x)
            u=mid-1;
        else
            p=mid+1;
    }
    return p;
}
void afisare(int i)
{
    if(ant[i]!=i)
    {
        afisare(ant[i]);
    }
    fout<<a[i]<<" ";
}
int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)
    {
        fin>>a[i];
        ant[i]=i;
        l[i]=1;
    }
    d[1]=k=1;
    for(int i=2;i<=n;i++)
    {
        p=cautbin(a[i]);
        if(p==k+1)
            k++;
        d[p]=i;
        if(p>l[i])
        {
            l[p]=p;
            ant[i]=d[p-1];
        }
        if(l[p]>lmax)
        {
            lmax=l[p];
            pm=i;
        }
    }
    fout<<lmax<<"\n";
    afisare(pm);
    return 0;
}