Cod sursa(job #2600414)

Utilizator k2e0e0w3qDumitrescu Gheorghe k2e0e0w3q Data 12 aprilie 2020 15:57:08
Problema Range minimum query Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.69 kb
#include <stdio.h>
#define N 100000
#define log(x) 31-__builtin_clz(x)

inline int min (const int x, const int y) {
  return x<y?x:y;
}
int v[N], seg[log(N)+1][N];
int main (void) {
  FILE *fin=fopen("rmq.in", "r"),
       *fout=fopen("rmq.out", "w");
  int n, q, i, j, x, y;
  fscanf(fin, "%d%d", &n, &q);
  for (i=0; i<n; i++) {
    fscanf(fin, "%d", v+i);
    seg[0][i]=v[i];
  }
  for (i=1; (1<<i)<n; i++)
    for (j=0; j+(1<<i)<=n; j++)
      seg[i][j]=min(seg[i-1][j], seg[i-1][j+(1<<i-1)]);
  for (; q; q--) {
    fscanf(fin, "%d%d", &x, &y);
    --x, --y;
    int lg=log(y-x+1);
    fprintf(fout, "%d\n", min(seg[lg][x], seg[lg][y-(1<<lg)+1]));
  }
  fclose(fin);
  fclose(fout);
  return 0;
}