Cod sursa(job #1962998)

Utilizator ioanavasilescuIoana Vasilescu ioanavasilescu Data 12 aprilie 2017 10:53:13
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <iostream>
#include <fstream>

using namespace std;

int a[100010],t[100010],scmax[100010],k,indicele[100010];

int caut_bin(int x)
{
    int st,dr,mijl;
    st=0;dr=k;
    bool gasit=0;
    while(st<=dr&&!gasit)
    {
        mijl=st+(dr-st)/2;
        if(scmax[mijl]>x)dr=mijl-1;
        else st=mijl+1;
        if(scmax[mijl]==x)gasit=1;
    }
    return mijl-1;
}

int main()
{
    ifstream fin("scmax.in");
    ofstream fout("scmax.out");
    int n,i,imax,aux;
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>a[i];
    k=0;
    for(i=1;i<=n;i++)
    {
        if(a[i]>scmax[k])
        {
            scmax[++k]=a[i];
            t[i]=indicele[k-1];
            indicele[k]=i;
        }
        else
        {
            scmax[caut_bin(a[i])+1]=a[i];
            t[i]=indicele[caut_bin(a[i])];
            indicele[caut_bin(a[i])+1]=i;
        }
    }
    fout<<k<<"\n";
    imax=indicele[k];
    aux=k;
    for(i=imax;i>0;)
        scmax[aux--]=a[i],i=t[i];
    for(i=1;i<=k;i++)
        fout<<scmax[i]<<" ";
    return 0;
}