Cod sursa(job #2286133)

Utilizator richard26Francu Richard richard26 Data 19 noiembrie 2018 20:52:58
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <bits/stdc++.h>
#define N_MAX 100001

using namespace std;

int m[N_MAX][18], arr[100001];

int pmini(int x, int y)
{
	return ( (arr[x] < arr[y]) ? x:y);
}
void rmq(int n)
{
	
	for (int i = 0; 1 << i <= n; i++)
		for (int j = 0; j + (1 << i) - 1 < n; j++)
		{
			if (i == 0) m[j][i] = j;
				else{
					int x = m[j][i - 1];
					int y = m[j + (1 << (i - 1))][i - 1];
					m[j][i] = pmini(x, y);
				}
		}
}

int quuery(int l, int r)
{
	int diff = r - l + 1;
	int k = log(diff);
	int x = m[l][k];
	int y = m[l + diff - (1 << k)][k];
	int mini = pmini(x, y);
	return arr[mini];
	

}
int main()
{
	ifstream f("rmq.in");
	ofstream g("rmq.out");
	int n, k;
	f>>n>>k;
	for (int i = 0; i < n; i++)
		f>>arr[i];
	rmq (n);
	
	for (int i = 0; i < k; i++){
		int x, y;
		f>>x>>y;
		g<<quuery(x - 1, y - 1)<<"\n";

	}
	return 0;

}