Cod sursa(job #1800049)

Utilizator andrei_diaconu11Andrei C. Diaconu andrei_diaconu11 Data 7 noiembrie 2016 11:24:23
Problema Range minimum query Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.6 kb
#include <stdio.h>
#define LOG log[b-a+1]
int d[100001][17], log[17];

inline int min(int a,int b){
  return a<b ? a:b;
}

int main()
{
  int n, m, i, a, b, j;
  FILE *fi=fopen("rmq.in", "r"), *fo=fopen("rmq.out", "w");
  fscanf(fi, "%d%d", &n, &m);
  for(i=1;i<=n;i++)
    fscanf(fi, "%d", &d[i][0]);
  for(i=1;i<=n;i++)
    for(j=1;(1<<j)<=i;j++)
      d[i][j]=min(d[i][j-1],d[i-(1<<(j-1))][j-1]);
  log[1]=0;
  for(i=2;i<=n;i++)
    log[i]=1+log[i/2];
  for(i=0;i<m;i++){
    fscanf(fi, "%d%d", &a, &b);
    fprintf(fo, "%d\n", min(d[b][LOG],d[a+(1<<LOG)-1][LOG]));
  }
  fclose(fi);
  fclose(fo);
  return 0;
}