Cod sursa(job #951652)

Utilizator Vladinho97Iordan Vlad Vladinho97 Data 21 mai 2013 11:33:45
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <cstdio>
using namespace std;
int lungime,v[100009],poz[100009],nr[100009];
void bs(int x,int i)
{
    int med,inc=1,sf=lungime;
    while(inc<sf-1)
    {
        med=(inc+sf)/2;
        if(v[med]<x)
        {
            inc=med;
        }
        else
        {
            sf=med;
        }
    }
    v[sf]=x;
    poz[i]=sf;
}
int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    int n,i,x,cautat;
    lungime=1;
    poz[1]=1;
    scanf("%d",&n);
    scanf("%d",&x);
    v[1]=x;
    nr[1]=x;
    for(i=2;i<=n;i++)
    {
        scanf("%d",&x);
        nr[i]=x;
        if(x>v[lungime])
        {
            lungime++;
            v[lungime]=x;
            poz[i]=lungime;
        }
        else
        {
            if(v[1]>x)
            {
                v[1]=x;
                poz[i]=1;
            }
            else
            {
                bs(x,i);
            }

        }
    }
    printf("%d\n",lungime);
    cautat=lungime;
    for(i=n;i>=1;i--)
    {
        if(poz[i]==cautat)
        {
            v[cautat]=nr[i];
            cautat--;
            if(cautat==0)
                break;
        }
    }
    for(i=1;i<=lungime;i++)
        printf("%d ",v[i]);



    return 0;
}