Cod sursa(job #168416)

Utilizator K0nTr0LBucatea Madalin Stefan K0nTr0L Data 31 martie 2008 12:41:34
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.54 kb
#include<stdio.h>
#define min(a,b) ((a<=b)?a:b)
int b[100001],a[40][100001],n,m,i,j,k,l,p;
FILE *in,*out;

int main(){
in=fopen("rmq.in","rt");
out=fopen("rmq.out","wt");
fscanf(in,"%d%d",&n,&m);
b[1]=0;
for(i=2;i<=n;i++)
 b[i]=b[i>>1]+1;
for(i=1;i<=n;i++)
 fscanf(in,"%d",&a[0][i]);
for(i=1;i<=b[n];i++){
 l=n-(1<<i)+1;
  for(j=1;j<=l;j++)
   a[i][j]=min(a[i-1][j],a[i-1][((j*2+(1<<i)-1)>>1)+1]);
}
for(i=1;i<=m;i++){
 fscanf(in,"%d%d",&l,&p);
 k=b[p-l+1];
 fprintf(out,"%d\n",min(a[k][l],a[k][p-(1<<k)+1]));
}
return 0;
}