запрос на RMQ с использованием разложения SQRT

int query(int l, int r)
{
  int LB = l/Blk; //Blk = block size
  int RB = r/Blk;
  int minimum = INT_MAX;
  
  if(LB == RB) {
    for(int i=l; i<=r; i++) {
      minimum = min(minimum, arr[i]);
    }
  }
  else {
    for(int i=l; i<Blk*(LB+1); i++) minimum = min(minimum, arr[i]);
    for(int i=LB+1; i<RB; i++) minimum = min(minimum, seg[i]);
    for(int i=RB*Blk; i<=r; i++) minimum = min(minimum, arr[i]);
  }
  return min;
}
Wandering Wolverine