Cod sursa(job #230276)

Utilizator katakunaCazacu Alexandru katakuna Data 13 decembrie 2008 15:24:40
Problema Secv Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<stdio.h>
#define INF 1<<30
#include<algorithm>
using namespace std;

int Min,i,j,n,m,a[5111],b[5111],v[5111],c1[5003],c2[5003];

int main(){

FILE *f=fopen("secv.in","r");
fscanf(f,"%d",&n);
  for(i=1;i<=n;i++){
  fscanf(f,"%d",&a[i]);
  v[i]=a[i];
  }
fclose(f);

sort(v+1,v+1+n);

  for(i=1;i<=n;i++){
    if(v[i]!=v[i-1]){
    m++;
    b[m]=v[i];
    }
  }

  for(i=1;i<=n;i++)
  c1[i]=1;

  for(i=1;i<=m;i++){

    for(j=1;j<=n;j++){
      if(c1[j]){
         if(b[i] == a[j]){
         c2[j]=c1[j];

           if(c2[j-1] && c2[j] > c2[j-1] + 1)
           c2[j] = c2[j-1] + 1;
           
         }

         else{
           if(c2[j-1])
           c2[j] = c2[j-1] + 1;
         }
      }
    }

    for(j=1;j<=n;j++){
    c1[j]=c2[j];
    c2[j]=0;
    }
    
  }

Min=INF;
  for(j=1;j<=n;j++){
    if(c1[j]){
      if(c1[j]<Min)
      Min=c1[j];
    }
  }

FILE *g=fopen("secv.out","w");
  if(Min==INF)
  fprintf(g,"%d",-1);
  else
  fprintf(g,"%d",Min);
  
fclose(g);

return 0;
}