Cod sursa(job #307018)

Utilizator mlazariLazari Mihai mlazari Data 22 aprilie 2009 19:07:09
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 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][1<<(j-1)+i] mk[j][i]=mk[j-1][i];
    else mk[j][i]=mk[j-1][1<<(j-1)+i];
  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;
}