Cod sursa(job #229637)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 10 decembrie 2008 21:43:52
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 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 = t[y - x + 1];	
		printf("%d\n",min(c[j][x], c[j][y - (1<<j) + 1]));
	}
	return 0;
}