Cod sursa(job #1966890)

Utilizator oanaroscaOana Rosca oanarosca Data 15 aprilie 2017 17:19:17
Problema Range minimum query Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.62 kb
#include <fstream>

using namespace std;

int n, q, st, dr, l, log[100001], m[18][100001];

void dp () {
  int lp;
  for (int l = 1; (lp = (1 << l)) <= n; l++)
    for (int c = 1; c+lp-1 <= n; c++)
      m[l][c] = min(m[l-1][c], m[l-1][c+lp/2]);
}

int main () {
  ifstream fi("rmq.in");
  ofstream fo("rmq.out");
  fi >> n >> q;
  for (int i = 1; i <= n; i++)
    fi >> m[0][i];
  dp();
  log[1] = 0;
  for (int i = 2; i <= n; i++)
    log[i] = log[i/2]+1;
  for (int i = 1; i <= q; i++) {
    fi >> st >> dr;
    l = log[dr-st+1];
    fo << min(m[l][st], m[l][dr - (1 << l)]) << '\n';
  }
  return 0;
}