Cod sursa(job #1687485)

Utilizator andreizaicescuAndrei Zaicescu andreizaicescu Data 12 aprilie 2016 21:28:43
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>

using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int a[100001],b[100001],c[100001],n,i,k;
int caut(int x, int y, int nr)
{
    int m=(x+y)/2;
    while(x<=y)
    {
        m=(x+y)/2;
        if(c[m]==nr)
            return m;
        else
            if(c[m]>nr)
        {
            y=m-1;
        }
        else
            x=m+1;
    }
    return x;
}
void afis(int k,int i)
{
    if(k>0 )
    {
        if(b[i]==k)
        {
            afis(k-1,i-1);
            g<<a[i]<<" ";
        }
        else
            afis(k,i-1);
    }
}
int main()
{
    f>>n;
    for(i=1;i<=n;i++)
        f>>a[i];
    b[1]=1;
    c[1]=a[1];
    k=1;
    for(i=2;i<=n;i++)
    {
        int r=caut(1,k,a[i]);
        if(a[i]<=c[r])
        {
            b[i]=r;
            c[r]=a[i];
        }
        else
        {
            k++;
            b[i]=k;
            c[k]=a[i];
        }
    }
    g<<k<<'\n';
    afis(k,n);
    return 0;
}