Cod sursa(job #740053)

Utilizator rzvrzvNicolescu Razvan rzvrzv Data 24 aprilie 2012 16:47:15
Problema Subsir crescator maximal Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<cstdio>

using namespace std;

int a[100100],st[100100],pos[100100],i,n,mx,prev,lg;

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]);
    }
    a[0]=-1;
    st[1]=a[1];
    pos[1]=1;
    lg=1;
    for (i=2;i<=n;i++)
    {
        while (a[i]<=st[lg])
        {
            lg--;
        }
        lg++;
        st[lg]=a[i];
        pos[i]=lg;
    }
    for (i=1;i<=n;i++)
    {
        if (pos[i]>mx)
        {
            mx=pos[i];
            prev=i;
        }
    }
    printf("%d\n",mx);
    st[mx]=a[prev];
    for (i=prev-1;i>=1;i--)
    {
        if (pos[i]==pos[prev]-1&&a[i]<a[prev])
        {
            st[pos[i]]=a[i];
            prev=i;
        }
    }
    for (i=1;i<=mx;i++)
    {
        printf("%d ",st[i]);
    }
    printf("\n");
    return 0;
}