Cod sursa(job #229633)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 10 decembrie 2008 21:39:44
Problema Range minimum query Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <stdio.h>

int N, c[20][100005], M, t[100005];

int min(int x, int y) { return x < y ? x  :y;}

int main()
{
	freopen("rmq.in","r",stdin);
	freopen("rmq.out","w",stdout);

	int i, j, x, y, p;
	scanf("%d %d",&N,&M);
	for (i = 1; i <= N; i++) scanf("%d",&c[0][i]);

	t[1] = 0;
	for (i = 2; i <= N; i++) t[i] = t[i / 2] + 1;

	for (i = 1; (1 << i) <= N; i++)
	{
		for (j = 1; j <= N - (1 << i) + 1; j++)
			c[i][j] = min(c[i - 1][j], c[i - 1][j + (1<<(i - 1))]);
	}

	for (i = 1; i <= M; i++)
	{
		scanf("%d %d",&x,&y);

		j = y - x + 1;
		p = t[j];	
		printf("%d\n",min(c[p][x], c[p][y - (1<<(p - 1))]));
	}
	return 0;
}