Cod sursa(job #949141)

Utilizator selea_teodoraSelea Teodora selea_teodora Data 12 mai 2013 16:51:58
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include<stdio.h>

using namespace std;

int a[100005],v[100005],p[100005],n,maxim;
int cautbin(int val, int vct[])
{
    int mij,st,dr,pos=0;
    st=1;
    dr=vct[0];
    while(st<=dr&&pos==0)
    {
        mij=(st+dr)/2;
        if(vct[mij]==val)
            pos=mij;
        else
        if(vct[mij]>val)
            dr=mij-1;
            else st=mij+1;

    }
    if(pos==0)
        return st;
    return pos;
}
void sir()
{

    v[0]=p[1]=1;
    v[1]=a[1];
    int i;
    for(i=2;i<=n;i++)
    {
        if(a[i]>v[v[0]])
        {
            v[0]++;
            v[v[0]]=a[i];
            p[i]=v[0];
        }
        else
        {
            p[i]=cautbin(a[i],v);
            v[p[i]]=a[i];
        }
        if(p[i]>maxim)
            maxim=p[i];
    }
}
int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    sir();
    printf("%d\n",v[0]);
    for(int i=1;i<=v[0];i++)
        printf("%d ",v[i]);
    printf("\n");
    return 0;
}