Cod sursa(job #2902700)

Utilizator Rares_StefanoiuRares Stefanoiu Rares_Stefanoiu Data 16 mai 2022 18:43:51
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.73 kb
#include<iostream>
#include<fstream>
#include<math.h>
using namespace std;
int n, m, v[100000], i, M[999999][20], x, y, j;
int main() {
	ifstream f("rmq.in");
	ofstream g("rmq.out");
	f >> n >> m;
	for (i = 0; i < n; i++)
		f >> v[i];
	for (i = 0; i < n; i++)
		M[i][0] = i;
	for (j = 1; (1 << j) <= n; j++)
		for (i = 0; i + (1 >> j) - 1 < n; i++)
			if (v[M[i][j - 1]] <= v[M[i + (1 << (j-1))][j - 1]])
				M[i][j] = M[i][j - 1];
			else
				M[i][j] = M[i + (1 << (j-1))][j - 1];
	for (i = 0; i < m; i++)
	{
		f >> x >> y;
		x--;
		y--;
		int k = floor(log2(y - x + 1));
		if (v[M[x][k]] <= v[M[y - (1 << k) + 1][k]])
			g<< v[M[x][k]]<<"\n";
		else
			g << v[M[y - (1 << k) + 1][k]]<<"\n";
	}
	return 0;
}