Cod sursa(job #1276651)

Utilizator Darius15Darius Pop Darius15 Data 26 noiembrie 2014 18:08:02
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <fstream>


using namespace std;

ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, i, a[100001], m[20][100001], s, d, q, lu, lg[100001], l;

void dina () {
  int c, l;
  for (c = 1; c <= n; c++)
    m[0][c] = a[c];
  for (l = 1; (lu = (1 << l)) <= n; l++)
    for (c = 1; c + (lu - 1) <= n; c++)
      m[l][c] = min (m[l - 1][c], m[l - 1][c + (lu<<1)]);
}

int main() {
  fin >> n >> q;
  for (i = 1; i <= n; i++)
    fin >> a[i];
  dina ();
  lg[1] = 0;
  for (i = 2; i <= n; i++)
    lg[i] = lg[i / 2] + 1;
  for (i = 1; i <= q; i++) {
    fin >> s >> d;
    lu = d - s + 1; l = lg[lu];
    fout << min (m[l][s], m[l][d - (1 << l) + 1]) << '\n';
  }
  return 0;
}