Cod sursa(job #1391019)

Utilizator akaprosAna Kapros akapros Data 17 martie 2015 16:03:00
Problema Subsir 2 Scor 65
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<cstdio>
#include<cstring>
#include<algorithm>
#define Nmax 5005
using namespace std;
int n,i,j,p,v[Nmax],a[Nmax],b[Nmax];
int w[Nmax];
int sol;
int main()
{
    freopen("subsir2.in","r",stdin);
    freopen("subsir2.out","w",stdout);
    scanf("%d",&n);
    for (i=1;i<=n;i++)
    scanf("%d",&v[i]);
    a[n]=1;
    for (i=n-1;i>=1;i--)
    {
        if (i==2)
        i=i;
        a[i]=1; b[i]=i;
        for (j=i+1;j<=n;j++)
        if (v[i]<=v[j])
        {
            if (v[w[j]]>=v[i] && w[j])
            continue;
            if (a[i]==1 || a[j]+1<=a[i])
            {
                if (a[j]+1!=a[i])
                a[i]=a[j]+1,w[j]=i,b[i]=j;
                else
                if (v[j]<v[b[i]])
                b[i]=j,w[j]=i;
            }
        }
    }
    sol=Nmax+1;
    for (i=1;i<=n;i++)
    if (!w[i] && sol>=a[i])
    {
        if (sol>a[i])
        sol=a[i],p=i;
        else if (v[i]<v[p])
        p=i;
    }
    printf("%d\n",sol);
    for (i=1;i<=sol;i++)
    {
        printf("%d ",p);
        p=b[p];
    }
    return 0;
}