Cod sursa(job #3288154)

Utilizator AndreiMLCChesauan Andrei AndreiMLC Data 20 martie 2025 18:54:17
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.73 kb
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <fstream>

using namespace std;

ifstream f("rmq.in");
ofstream g("rmq.out");

const int NMAX = 100005;
const int LOGMAX = 20;

int rmq[LOGMAX][NMAX];
int lg[NMAX];

int n;
int m;

int main()
{
	f >> n >> m;
	for(int i = 1;i<= n; i++)
	{
		f >> rmq[0][i];
	}

	for (int p = 1; (1 << p) <= n; p++)
	{
		for (int i = 1; i <= n; i++)
		{
			rmq[p][i] = min(rmq[p - 1][i], rmq[p - 1][i + (1 << (p - 1))]);
		}
	}
	
	for(int i = 2;i<= n; i++)
	{
		lg[i] = lg[i/2] + 1;
	}

	for (int i = 1; i <= m; i++)
	{
		int x, y;
		f >> x >> y;
		int p = lg[y - x + 1];
		g << min(rmq[p][x], rmq[p][y - (1 << p) + 1]) << '\n';
	}
}