Cod sursa(job #178912)

Utilizator omu_salcamtache tudor omu_salcam Data 15 aprilie 2008 13:09:34
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<stdio.h>
#include<math.h>
FILE *f1,*f2;
int v[1111],ma[111][111];
unsigned int p[17]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536};
long a,b,c,n,m,i,j,l;
int main(){
f1=fopen("rmq.in","r");
f2=fopen("rmq.out","w");
fscanf(f1,"%ld%ld",&n,&m);
for(i=1;i<=n;fscanf(f1,"%d",&v[i]),i++);
for(i=0;i<=n;ma[i][0]=v[i],i++);
for(i=n;i>0;i--){
  a=1;
  for(j=1;i+a<=n+1&&j<=n;j++){
    a=pow(2,j-1);
    ma[i][j]=ma[i+a][j-1];
    if(ma[i][j-1]<ma[i+a][j-1]){
      ma[i][j]=ma[i][j-1];
    }
  }
}
for(i=1;i<=m;i++){
  fscanf(f1,"%d%d",&a,&b);
  l=0;
  c=b-a+1;
  while(c<p[l]){
    l++;
  }
  l--;
  c=ma[a][l];
  if(ma[a][l]>ma[b-p[l]+1][l]){
    c=ma[b-p[l]+1][l];
  }
  fprintf(f2,"%ld\n",c);
//  min([x,y])=min(a[x][L],a[y-2^L+1][L])
}
return 0;
}