Cod sursa(job #2015387)

Utilizator GoogalAbabei Daniel Googal Data 25 august 2017 23:47:52
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int NMAX = 100000;
const int LOGMAX = 18;

int n, m;
int dp[1 + NMAX][1 + LOGMAX];

int main()
{
  in >> n >> m;
  for(int i = 1; i <= n; i++)
    in >> dp[i][0];
  for(int i = 1; i <= n; i++){
    for(int j = 1; (1 << j) <= n; j++){
      dp[i][j] = min(dp[i][j - 1], dp[i + (1 << (j - 1))][j - 1]);
    }
  }

  /*for(int i = 0; i <= n; i++){
    for(int j = 0; (1 << j) <= n; j++){
      out << dp[i][j] << ' ';
    }
    out << '\n';
  }*/

  for(int i = 1; i <= m; i++){
    int x, y, delta;
    in >> x >> y;
    delta = y - x;
    int k = 0;
    for(k; (1 << k) <= delta; k++);
    k--;
    out << min(dp[x][k], dp[y - (1 << k) + 1][k]) << '\n';
  }
  return 0;
}