Cod sursa(job #1188130)

Utilizator tudormaximTudor Maxim tudormaxim Data 18 mai 2014 22:52:08
Problema Subsir 2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <cstdio>
#define lim 2000000000
#define nmax 5005
using namespace std;
int v[nmax],d[nmax],t[nmax],n,i,valmin,min,x,j;
FILE *f=fopen("subsir2.in","r");
FILE *g=fopen("subsir2.out","w");
int main()
{
    fscanf(f,"%d",&n);
    for(i=1;i<=n;i++)
        fscanf(f,"%d",&v[i]);
    d[n]=1;t[n]=0;
    for(i=n-1;i>=1;i--)
    {
        min=valmin=x=lim;
        for(j=i+1;j<=n;j++)
        {
            if(v[j]<min&&v[j]>=v[i])
            {
                min=v[j];
                if(x==d[j]&&v[j]<valmin){valmin=v[j]; t[i]=j;}
                if(d[j]<x){valmin=v[j]; x=d[j]; t[i]=j;}
            }
        }
        if(x!=lim) d[i]=x+1;
        else {d[i]=1; t[i]=0;}
    }
    valmin=min=x=lim;
    for(i=1;i<=n;i++)
    {
        if(valmin>v[i])
        {
            if(d[i]==min&&v[i]<v[x]) x=i;
            if(d[i]<min) { min=d[i]; x=i;}
            valmin=v[i];
        }
    }
    fprintf(g,"%d\n%d ",min,x);
    while(t[x]!=0)
    {
        fprintf(g,"%d ",t[x]);
        x=t[x];
    }
    fclose(f);
    fclose(g);
    return 0;
}