Cod sursa(job #2903484)

Utilizator AntoniaPopoviciAntonia-Adelina Popovici AntoniaPopovici Data 17 mai 2022 17:05:53
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include<fstream>
#include<math.h>
using namespace std;
int a[100][100001], l, lg[100001], v[100001], n, m, i, j, k, x, y, d;

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

int main()
{
	fin >> n >> m;
	for (i = 1; i <= n; i++)
		fin >> v[i];
	for (i = 1; i <= n; i++)
		a[0][i] = v[i];

	for (k = 1; (1 << k) <= n; k++)
		for (i = 1; i + (1 << k) - 1 <= n; i++)
			a[k][i] = min(a[k - 1][i], a[k - 1][i + (1 << (k - 1))]);

	lg[1] = 0;
	for (i = 2; i <= n; i++)
		lg[i] = lg[i >> 1] + 1;

	for (i = 1; i <= m; i++)
	{
		fin >> x >> y;
		d = y - x + 1;
		l = lg[d];
		if (a[l][x] <= a[l][x + (d-(1<<l))])
			fout << a[l][x] << '\n';
		else
			fout << a[l][x + (d - (1 << l))] << '\n';
	}

	fin.close();
	fout.close();
	return 0;
}