Cod sursa(job #2635450)

Utilizator dream3rDavid Pop dream3r Data 14 iulie 2020 15:23:05
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
//#include "pch.h"
#include <iostream>
#include <fstream>
#include <climits>
#include <algorithm>
#include <cmath>
#include <vector>
#include <queue>
using namespace std;
ifstream f("rmq.in");
ofstream o("rmq.out");
int v[100005][24];
int n, m;
int low, high;
int lg[100005];
void rmq()
{
	for (size_t i = 1; i <= n; i++)
	{
		int k;
		f >> k;
		v[i][0] = k;
	}


	for (size_t j = 1; (1 << j) <= n; j++)
	{
		for (size_t i = 1; i <= n - (1 << j) + 1; i++)
		{
			v[i][j] = min(v[i][j - 1], v[i + (1 << (j - 1))][j - 1]);
		}
	}
}




int main()
{
	f >> n >> m;
	for (size_t i = 2; i < n; i++)
	{
		lg[i] = lg[i / 2] + 1;
	}
	rmq();
	while (m--)
	{
		f >> low >> high;
		int len = high - low + 1;
		int log2 = lg[len];
		o << min(v[low][log2], v[high - (1 << log2) + 1][log2]) << "\n";
	}

}