Cod sursa(job #2788738)

Utilizator TghicaGhica Tudor Tghica Data 26 octombrie 2021 13:06:52
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>
#include <algorithm>

#define NMAX 100002
#define LMAX 18

using namespace std;

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

int rmq[LMAX][NMAX];
int lg[NMAX];

int main() {
  int i, j, n, m, lgCur, a, b, mn1, mn2;
  cin>>n>>m;

  for( i = 1; i <= n; i++ ) {
    cin>>rmq[0][i];
  }

  for( i = 2; i <= n; i++ ) {
    lg[i] = lg[i / 2] + 1;
  }

  lgCur = lg[n];
  for( i = 1; i <= lgCur; i++ ) {
    for( j = 1; j <= n - ( 1 << i ) + 1; j++ ) {
      rmq[i][j] = min( rmq[i - 1][j], rmq[i - 1][j + ( 1 << ( i - 1 ) )] );
    }
  }

  for( i = 1; i <= m; i++ ) {
    cin>>a>>b;
    mn1 = rmq[lg[b - a + 1]][a];
    mn2 = rmq[lg[b - a + 1]][b - ( 1 << lg[b - a + 1]) + 1];
    cout<<min( mn1, mn2 )<<"\n";
  }
  return 0;
}