Cod sursa(job #3159747)

Utilizator Bianca2507Negret Bianca Bianca2507 Data 21 octombrie 2023 21:57:10
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.65 kb
#include <fstream>

using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int n, r[20][100001],e[100001],m,st,dr,exp,len,j,p;
int main()
{
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
		cin >> r[0][i];

	e[1] = 0;
	for (int i = 2; i <= n; i++)
		e[i] = 1 + e[i / 2];

	for ( p = 1; (1 << p) <= n; p++)
		for (int i = 1; i <= n; i++)
		{
			r[p][i] = r[p - 1][i];
			j = i + (1 <<(p-1));
			if (j <= n)
				r[p][i] = min(r[p][i], r[p - 1][j]);
		}

	for (int i = 1; i <= m; i++)
	{
		cin >> st >> dr;
		exp = e[dr - st + 1];
		len = (1 << exp);
		cout << min(r[exp][st], r[exp][dr - len + 1]) << '\n';
	}
	return 0;
}