Cod sursa(job #560163)

Utilizator theodora_maneaManea Theodora Maria theodora_manea Data 18 martie 2011 12:50:38
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.59 kb
#include <stdio.h>

int n,m,x,y,p,n1,i,j,q;
int a[20][100001];

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

int main () {
	freopen("rmq.in","r",stdin);
	freopen("rmq.out","w",stdout);
	scanf("%d%d",&n,&m);
	p=0;
	n1=n;
	while (n1!=1) {
		n1/=2;
		p++;
	}
	
	for (i=1; i<=n; i++) scanf("%d",&a[0][i]);
	
	for (i=1; i<=p; i++)
		for (j=1; j<=n-(1<<(i-1)); j++) 
			a[i][j]=min(a[i-1][j],a[i-1][j+(1<<(i-1))]);
	
	for (i=1; i<=m; i++) {
		scanf("%d%d",&x,&y);
		q=0;
		while ((1<<(q+1))<=y-x) q++;
		printf("%d\n",min(a[q][x],a[q][y-(1<<q)+1]));
	}
	return 0;
}