Cod sursa(job #2246264)

Utilizator andrei_diaconu11Andrei C. Diaconu andrei_diaconu11 Data 26 septembrie 2018 21:16:04
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fi("rmq.in");
ofstream fo("rmq.out");

int rmq[100000][17], lg2[100001];

int main()
{
  int n, q, x, y;
  fi >> n >> q;
  for(int i = 0; i < n; i++)
    fi >> rmq[i][0];
  for(int i = 2; i < n; i++)
    lg2[i] = lg2[i / 2] + 1;
  for(int i = 0; i < n; i++)
    for(int j = 1; (1 << j) <= i + 1; j++)
      rmq[i][j] = min(rmq[i][j - 1], rmq[i - (1 << (j - 1))][j - 1]);
  for(int i = 0; i < q; i++){
    fi >> x >> y;
    x--; y--;
    fo <<  min(rmq[y][lg2[y - x + 1]], rmq[x - 1 + (1 << lg2[y - x + 1])][lg2[y - x + 1]]) << '\n';
  }
  fi.close();
  fo.close();
  return 0;
}