Cod sursa(job #978243)

Utilizator raulmuresanRaul Muresan raulmuresan Data 28 iulie 2013 14:20:33
Problema Subsir crescator maximal Scor 5
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
// subsir crescator maximal cu cautare binara


#include <cstdio>

using namespace std;
int i, j, n, lung[10005],cont,maxi,sf,val[10005];
int v[10005];

int minim(int a,int b)
{
    if(a<b) return a;
    return b;
}

int binary(int st,int dr,int x)
{
    int mij;

    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(mij==dr || v[mij]>=x && v[mij-1]<x)
        {
            val[mij]=minim(val[mij],x);
            return mij;
        }
    }
}



int main() {

    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    scanf("%d",&n);

    for(i=1;i<=n;i++)
    {
        scanf("%d",&v[i]);
    }

    for(i=1;i<=n;i++)
    {
        if(v[i]>val[sf])
        {
            sf++;
            val[sf]=v[i];
            lung[i]=sf;
        }
        else
        {
            lung[i]=binary(1,sf,v[i]);
        }
    }

    printf("%d\n",sf);
}