Cod sursa(job #2897611)

Utilizator PetstebPopa Petru Petsteb Data 4 mai 2022 11:18:45
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>
using namespace std;

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

const int NMAX = 1e5+1, MMAX = 1e6 + 1;
int pow[33], log[NMAX], rmq[33][NMAX];

int main()
{
  int n, m;
  in >> n >> m;
  for(int i = 1; i <= n; ++i)
    in >> rmq[0][i];
  ///
  log[1] = 0;
  for(int i = 2; i <= NMAX; ++i)
    log[i] = 1 + log[i/2];

  for(int i = 0; i <= 32; ++i)
    pow[i] = (1<<i);
  ///
  for(int i = 1; (1<<i) <= n; ++i){
    for(int j = 1; j <= n; ++j){
      rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j + pow[i-1]]);
    }
  }
  ///
  int a, b;
  while(m--){
    in >> a >> b;
    int ceva = log[b - a];
    out << min(rmq[ceva][a], rmq[ceva][b - pow[ceva] + 1]) << '\n';
  }
  return 0;
}