Cod sursa(job #1734442)

Utilizator cella.florescuCella Florescu cella.florescu Data 27 iulie 2016 12:21:18
Problema Subsir 2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <cstdio>
#define MAXN 5000
#define INF 1000000001

using namespace std;

int v[MAXN+2], l[MAXN+2], prev[MAXN+2];

int main()
{
    FILE *fin, *fout;
    int n, i, j, lmin, pos, minim;
    fin=fopen("subsir2.in", "r");
    fscanf(fin, "%d", &n);
    for(i=1; i<=n; i++)
      fscanf(fin, "%d", &v[i]);
    fclose(fin);
    v[0]=-INF;
    for(i=n; i>=0; i--){
      minim=lmin=INF;
      pos=n+1;
      for(j=i+1; j<=n; j++)
        if(v[j]>=v[i] && v[j]<minim){
          minim=v[j];
          if(lmin>=l[j]){
            lmin=l[j];
            pos=j;
          }
        }
      if(lmin==INF)
        lmin=0;
      l[i]=lmin+1;
      prev[i]=pos;
    }
    fout=fopen("subsir2.out", "w");
    fprintf(fout, "%d\n", l[0]-1);
    for(i=1, pos=prev[0]; i<l[0]; i++, pos=prev[pos])
      fprintf(fout, "%d ", pos);
    fprintf(fout, "\n");
    fclose(fout);
    return 0;
}