Cod sursa(job #307034)

Utilizator mlazariLazari Mihai mlazari Data 22 aprilie 2009 19:55:51
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100001
#define MAXLOG 17

int a[MAXN],mk[MAXLOG][MAXN];

int main() {
  int n,m,i,j,k,x,y;
  freopen("rmq.in","r",stdin);
  freopen("rmq.out","w",stdout);
  scanf("%d %d",&n,&m);
  for(i=0;i<n;i++) {
    scanf("%d",a+i);
    mk[0][i]=a[i];
  }
  for(j=1;(1<<j)<=n;j++)
   for(i=0;i+(1<<j)<=n;i++)
    if(mk[j-1][i]<mk[j-1][i+(1<<(j-1))]) mk[j][i]=mk[j-1][i];
    else mk[j][i]=mk[j-1][i+(1<<(j-1))];
  for(i=0;i<m;i++) {
    scanf("%d %d",&x,&y);
    x--;
    y--;
    for(k=0;(1<<(k+1))<=(y-x+1);k++);
    if(mk[k][x]<mk[k][y-(1<<k)+1]) printf("%d\n",mk[k][x]);
    else printf("%d\n",mk[k][y-(1<<k)+1]);
  }
  fclose(stdout);
  return 0;
}