Cod sursa(job #2616126)

Utilizator alex_benescuAlex Ben alex_benescu Data 16 mai 2020 19:47:21
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.67 kb
#include <stdio.h>
#include <iostream>
int n, t, rmq[20][100005], log[100005], x, y;
int main(){
  freopen("rmq.in", "r", stdin);
  freopen("rmq.out", "w", stdout);
  int i, j, l, e;
  scanf("%d%d", &n, &t);
  for(i=1; i<=n; i++)
    scanf("%d", &rmq[0][i]);
  for(i=2; i<=n; i++)
    log[i]=1+log[i/2];
  for(i=1; i<=log[n]; i++)
    for(j=1; j<=n; j++){
      rmq[i][j]=rmq[i-1][j];
      e=i-1;
      if(j+(1<<e)<= n && rmq[i-1][j+(1<<e)]<rmq[i][j])
        rmq[i][j]=rmq[i-1][j+(1<<e)];
    }
  while(t--){
    scanf("%d%d", &x, &y);
    l=y-x+1;
    e=log[l];
    printf("%d\n", std::min(rmq[log[l]][x], rmq[log[l]][y-(1<<e)+1]));
  }
  return 0;
}