Cod sursa(job #2396404)

Utilizator VladTZYVlad Tiganila VladTZY Data 3 aprilie 2019 14:48:48
Problema Subsir crescator maximal Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>

#define NMAX 100005

using namespace std;

ifstream f("scmax.in");
ofstream g("scmax.out");

int n,i,maxi,o,v[NMAX],dr,a[NMAX],k,mij,lmax,l[NMAX],tata[NMAX],poz,imax,nr,s[NMAX],pozfin;
int binar(int x)
{
    int st=1,dr=k,mij,poz=k+1;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(a[v[mij]]==x)
            return mij;
        if(x<a[v[mij]])
        {
            poz=mij;
            dr=mij-1;
        }
        else
            st=mij+1;
    }
    return poz;
}
int main()
{
    f>>n;
    for(i=1;i<=n;i++)
        f>>a[i];
    k=1;v[1]=1;lmax=1;l[1]=1;tata[1]=0;
    for(i=2;i<=n;i++)
    {
        poz = binar(a[i]);
        v[poz]=i;
        l[i]=poz;tata[i]=v[poz-1];
        if(poz==k+1)
            k++;
        if(l[i]>lmax)
        {
            maxi=l[i];
            pozfin=i;
        }
    }
    g<<maxi<<"\n";
    while(pozfin!=0)
    {
        nr++;
        s[nr]=pozfin;
        pozfin=tata[pozfin];
    }
    for(i=nr;i>=1;i--)
        g<<a[s[i]]<<" ";

}