Cod sursa(job #800090)

Utilizator cat_red20Vasile Ioana cat_red20 Data 20 octombrie 2012 18:39:01
Problema Subsir 2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include<stdio.h>
int a[5001],v[5001],n,u,min,minl,p[5001],poz;
bool bif[5001];
FILE *fin,*fout;

void citire()
{
    fin=fopen("subsir2.in","r");
    fscanf(fin,"%d",&n);
    for(int i=1;i<=n;i++)
    {
        fscanf(fin,"%d",&v[i]);
    }
}

void afisare()
{
    fout=fopen("subsir2.out","w");
    fprintf(fout,"%d\n",min);
    while(poz!=0)
    {
        fprintf(fout,"%d ",poz);
        poz=p[poz];
    }
}

int main()
{
    citire();
    for(int i=n;i>=1;i--)
    {
        min=1000001;
        minl=n+1;
        a[i]=1;
        bif[i]=1;
        for(int j=i+1;j<=n;j++)
        {
            if(v[j]>=v[i])
            {

                if(a[j]<minl && v[j]<min)
                {
                    minl=a[j];
                    p[i]=j;
                    a[i]=a[j]+1;
                }
                else
                if(a[j]==minl && v[j]<min && v[j]<v[p[i]])
                {
                    p[i]=j;
                }
                if(v[j]<min)
                {
                    min=v[j];
                }
                bif[j]=0;
            }
        }
    }
    min=n+1;
    for(int i=1;i<=n;i++)
    {
        if(bif[i])
        {
            if(a[i]<min)
            {
                min=a[i];
                poz=i;
            }
            else
            if(a[i]==min && v[poz]>v[i])
            {
                poz=i;
            }
        }
    }
    afisare();
    return 0;
}