Cod sursa(job #2086885)

Utilizator qThunderStefan Durlanescu qThunder Data 12 decembrie 2017 17:15:50
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
using namespace std;
const int NMAX=100002;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,a[NMAX],l[NMAX],lmax,pm,ant[NMAX],j,i,poz,p,u,b[NMAX],k,mid;
void afisaren(int p)
{
    if(ant[p]!=p)
    {
        afisaren(ant[p]);
    }
    fout<<a[p]<<" ";
}
int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>a[i];
    }
    l[1]=1;
    ant[1]=1;
    b[1]=1;
    lmax=1;
    pm=1;
    for(i=2;i<=n;i++)
    {
        l[i]=1;
        ant[i]=i;
        poz=k+1;
        p=1;u=k;
        while(p<=u)
        {
            mid=(p+u)/2;
            if(a[b[mid]]==a[i])
                {
                    poz=mid;
                    break;
                }
            else
            {
                if(a[b[mid]]>a[i])
                {
                    poz=mid;
                    u=mid-1;
                }
                else
                    p=mid+1;
            }
        }
        b[poz]=i;
        l[i]=poz;
        if(poz>1)
            ant[i]=b[poz-1];
        if(poz==k+1)
            k++;
        if(l[i]>lmax)
        {
            lmax=l[i];
            pm=i;
        }
    }
    fout<<lmax<<"\n";
    afisaren(pm);
    return 0;
}