Cod sursa(job #3247449)

Utilizator S80P_ShadeslayerBadarau Andrei S80P_Shadeslayer Data 7 octombrie 2024 19:39:09
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <bits/stdc++.h>

using namespace std;

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

const int DIM = 1e5 + 1;
const int LG = 18;

int rmq[LG][DIM];
int lg[DIM];

int query( int l, int r ) {
  int k = lg[r - l + 1];
  return min(rmq[k][l], rmq[k][r - (1 << k) + 1]);
}

int main() {
  ios_base::sync_with_stdio(0);
  fin.tie(0);
  int n, q, x, y;

  fin >> n >> q;
  for ( int i = 1; i <= n; ++i ) {
	fin >> rmq[0][i];
  }
  for ( int i = 2; i <= n; ++i ) {
	lg[i] = lg[i >> 1] + 1;
  }
  for ( int k = 1; k < LG; ++k ) {
	for ( int i = 1; i + (1 << (k - 1)) <= n; ++i ) {
	  rmq[k][i] = min(rmq[k - 1][i], rmq[k - 1][i + (1 << (k - 1))]);
	}
  }
  while ( q-- ) {
	fin >> x >> y;
	fout << query(x, y) << "\n";
  }
  fin.close();
  fout.close();
  return 0;
}