Cod sursa(job #303473)

Utilizator bogdanhm999Casu-Pop Bogdan bogdanhm999 Data 9 aprilie 2009 21:10:01
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <stdio.h>
#define min(a,b) ((a<b)?a:b)
int lg[100005],a[18][100005];

int RMQ( int x, int y){
  int L = lg[y-x+1];
  return min(a[L][x],a[L][y-(1<<L)+1]);
} 

int main(){
  freopen("rmq.in","r",stdin); freopen("rmq.out","w",stdout);
  int N,M,i,j,L,E,x,y;
  
  scanf("%d %d",&N,&M);
  for (i=1;i<=N;++i) scanf("%d",&a[0][i]);
  //preproc
  for (i=2;i<=N;++i)lg[i]=lg[i>>1]+1;
  L = lg[N];
  /////
  for (j=1;j<=L;++j){
    E = N - (1<<j) + 1;
    for (i=1;i<=E;++i)
      a[j][i] = min( a[j-1][i], a[j-1][i+(1<<(j-1))] );
  }
  /////
  for (i=1;i<=M;++i){
    scanf("%d %d",&x,&y);
    printf("%d\n", RMQ(x,y) );
  }
return 0;
}