Cod sursa(job #591689)

Utilizator vladtarniceruVlad Tarniceru vladtarniceru Data 25 mai 2011 08:23:27
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
# include <fstream>
using namespace std;

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

int n, m, i, j, a[18][100010];

inline int minim (int a, int b){
	if (a < b) return a;
	return b;
}

inline int lgr (int a){
	int i;
	for (i = 1; (1 << i) <= a; ++i);
	return i - 1;
}

int x, y, d, lin;
int main (){
	f >> n >> m;
	
	for (i = 1; i <= n; ++i){
		f >> a[0][i];
	}
	
	int lim = (1 << lgr (n));
	for (i = 1; (1 << i) <= n; ++i){
		for (j = 1; j <= lim; ++j){
			a[i][j] = minim (a[i - 1][j], a[i - 1][j + (1 << (i - 1))]);
		}
		lim >>= 1;
	}
	
	for (i = 1; i <= m; ++i){
		f >> x >> y;
		d = y - x + 1;
		lin = lgr (d);
		g << minim ( a[lin][x], a[lin][x + d - (1 << lgr (d))] ) << '\n';
	}
	
	return 0;
}