Cod sursa(job #1255938)

Utilizator vladdy47Bucur Vlad Andrei vladdy47 Data 5 noiembrie 2014 16:40:30
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <cstdio>

using namespace std;
int a[100001],n,m,q[100001],i,poz[100001],b=0,u[100001];
int cautbin (int x)
{
    int st=1,dr=m,POZ=0,mij;
    mij=(st+dr)/2;
    while (st<=dr && POZ==0)
    {
        mij=(st+dr)/2;
        if (q[mij]==x) POZ=mij;
        else if (q[mij]<x) st=mij+1;
        else dr=mij-1;
    }

    if (POZ==0) return st;
    return POZ;
}

int main ()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);


    scanf("%d",&n);
    for (i=1; i<=n; i++)
        scanf("%d",&a[i]);
    q[1]=a[1];
    poz[1]=1;
    m=1;
    for (i=2; i<=n; i++)
    {
        poz[i]=cautbin(a[i]);
        q[poz[i]]=a[i];
        if(poz[i]>m) m++;

    }

    for (i=n; i>=1; i--)
        if(poz[i]==m)
        {
            u[++b]=a[i];
            m--;
        }
    for (i=b; i>=1; i--)
        printf("%d ",u[i]);


    return 0;
}