Cod sursa(job #982852)

Utilizator thewildnathNathan Wildenberg thewildnath Data 10 august 2013 12:49:27
Problema Subsir 2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<stdio.h>

int v[5002],a[5002],t[5002],f[5002];

void afis(int i)
{
    if(t[i])
        afis(t[i]);
    printf("%d ",v[i]);
}

int main()
{
    freopen("subsir2.in","r",stdin);
    freopen("subsir2.out","w",stdout);
    int n,i,j,m,sol,s;
    scanf("%d",&n);
    for(i=1;i<=n;++i)
        scanf("%d",&v[i]);
    for(i=1;i<=n;++i)
    {
        m=-2000000000;
        a[i]=2000000000;
        for(j=i-1;j>0;--j)
        {

            if(v[j]>m&&v[j]<v[i] && (a[j]<a[i]-1||(a[j]==a[i]-1&&v[j]<v[t[i]])))
            {
                t[i]=j;
                f[j]=i;
                a[i]=a[j]+1;
            }
            if(v[j]>m&&v[j]<v[i])
                m=v[j];

        }
        if(a[i]==2000000000)
                a[i]=1;
    }
    sol=s=2000000000;
    for(i=1;i<=n;++i)
        if(f[i]==0&&(a[i]<sol||(a[i]==sol&&v[i]<v[s])))
        {
            s=i;
            sol=a[i];
        }
    printf("%d\n",sol);
    afis(s);
    printf("\n");
    return 0;
}