Cod sursa(job #2767398)

Utilizator bubblegumixUdrea Robert bubblegumix Data 5 august 2021 23:44:49
Problema Range minimum query Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include<iostream>
#include<algorithm>
#include<fstream>
#define NMAX 100000+5
#define MMAX NMAX*10+5
#define LMAX 17
using namespace std;
int n, m;
int numere[NMAX];
int rmq[NMAX][LMAX];
int lg[NMAX];
ifstream f("rmq.in");
ofstream g("rmq.out");
int main()
{
	f >> n>>m;
	for (int i = 0; i < n; i++)
	{
		f >> numere[i];
		rmq[i][0] = numere[i];
	}
	lg[1] = 0;
	for (int i = 2; i <= n; i++)
		lg[i] = lg[i / 2]+1;

	for (int j = 1; (1 << j) <= n; j++)
		for (int i = 0; i + (1 << j) - 1 <= n; i++)
		{
			rmq[i][j] = min(rmq[i][j - 1], rmq[i + (1 << (j - 1))][j - 1]);
			
		}


	for (int i = 1; i <= m; i++)
	{
		int L, R;
		f >> L >> R;
		L--, R--;
		int length = R - L + 1;
		int k = lg[length];
		g << min(rmq[L][k], rmq[R - (1 << k) + 1][k]) << endl;
	}


}