Cod sursa(job #178857)

Utilizator swift90Ionut Bogdanescu swift90 Data 15 aprilie 2008 12:18:34
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#include<stdio.h>
int nr[100100][18],v[100100],log[100100];
inline int min(int a,int b){
	return a<b?a:b;
}
int main(){
	freopen("rmq.in","r",stdin);
	freopen("rmq.out","w",stdout);
	int n,m,i,j,lung,x,y;
	scanf("%d%d",&n,&m);
	scanf("%d",&v[1]);
	for(i=2;i<=n;++i){
		scanf("%d",&v[i]);
		log[i]=log[i>>1]+1;
	}
	for(lung=0;(1<<lung)<=n;++lung);
	for(i=n;i;--i){
		nr[i][0]=v[i];
		for(j=1;i+(1<<j)<=n+1;++j)
			nr[i][j]=min(nr[i][j-1],nr[i+(1<<(j-1))][j-1]);
	}
	
	for(i=0;i<m;++i){
		scanf("%d%d",&x,&y);
		j=log[y-x+1];
		printf("%d\n",min(nr[x][j],nr[y-(1<<j)+1][j]));
	}
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}