Cod sursa(job #2628397)

Utilizator AMAZONAMAZON GAZON AMAZON Data 15 iunie 2020 18:52:46
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <fstream>
#define M 100010
#define N 25
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, m;
int low[M];
int temp;
int length;
pair <int, int>query;
int ans[N][M], point[M];
int minim(int a, int b)
{
	if (a < b)
		return a;
	return b;
}
int main()
{
	f >> n >> m;
	for (int i = 1; i <= n; ++i)
	{
		f >> low[i];
		ans[0][i] = low[i];
	}
	point[1] = 0;
	for (int i = 2; i <= n; ++i)
	{
		point[i] = point[i / 2] + 1;
	}
	for (int i = 1; (1 << i) <= n; ++i)
	{
		for (int j = 1; j <= n - (1 << i) + 1; ++j)
		{
			ans[i][j] = minim(ans[i - 1][j], ans[i - 1][j + (1 << (i - 1))]);
		}
	}
	for (int i = 1; i <= m; ++i)
	{
		f >> query.first >> query.second;
		temp = query.second - query.first + 1;
		g << minim(ans[point[temp]][query.first], ans[point[temp]][query.second - (1 << point[temp]) + 1]) << "\n";
	}
	f.close();
	g.close();
	return 0;
}