Cod sursa(job #604959)

Utilizator ms-ninjacristescu liviu ms-ninja Data 26 iulie 2011 11:52:50
Problema Range minimum query Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.6 kb
#include <fstream>
using namespace std;

#define dim 19

int mat[dim][100001];
int v[10001],lg2[100001];


int main()
{
	ifstream fin("rmq.in");
	ofstream fout("rmq.out");
	int n, m,i,j;
	fin>>n >>m;
	
	for(i=1;i<=n;++i)
	{
		fin>>v[i];
		mat[0][i]=v[i];
	}
	
	for(i=1;(1<<i)<=n;++i)
	{
		for(j=1;j+(1<<i)-1<=n;++j)
			mat[i][j]=min(mat[i-1][j],mat[i-1][j+(1<<(i-1))]);
	}
	
	for (i=2; i<=n; ++i)
		lg2[i]=lg2[i/2]+1;
	
	for(i=1;i<=m;++i)
	{
		int x, y;
		fin>>x >>y;
		int re=lg2[y-x+1];
		
		fout<<min(mat[re][x],mat[re][y-(1<<re)+1])<<'\n';
	}
	
	
	
	
	return 0;
}