Cod sursa(job #1248884)

Utilizator dr_personalityEftime Andrei Horatiu dr_personality Data 26 octombrie 2014 10:43:54
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include<fstream>
#include<vector>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");

const int nmax = 100006;
int d[18][nmax], n, m, lgsup[nmax], x, y, rasp, dif, chestie;

int main(){
	int player_unu=0;

	in>>n>>m;
	for(int i = 1; i<=n; i++)
	{
		in>>d[0][i];
	}

	for(int i = 1; i<=17; i++)
		for(int j = 1; j<=n - (1<<i) + 1; j++)
			d[i][j] = min(d[i - 1][j], d[i - 1][j + (1<<(i - 1))]);

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

	for(int i = 0; i<m; i++)
	{
		in>>x>>y;

		dif = y - x + 1, chestie = dif - (1<<lgsup[dif]);
		rasp = min(d[lgsup[dif]][x], d[lgsup[dif]][x + chestie]);
		out<<rasp<<'\n';
	}

	return player_unu;
}