Cod sursa(job #408543)

Utilizator Andrei_ScorpioAndreiana Andrei Daniel Andrei_Scorpio Data 3 martie 2010 08:24:15
Problema Range minimum query Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#include<stdio.h>
#define Nmax 100100
long log[Nmax];
long n,m,vec[Nmax],x,y;
long mat[Nmax][20];
int min(long a,long b)
{
 if(a<b)
	return a;
 else
	return b;
}
int main()
{
 freopen("rmq.in","r",stdin);
 freopen("rmq.out","w",stdout);
 scanf("%ld %ld",&n,&m);
 int i=0,j=0;
 log[0]=-1;
 for(i=1;i<=n;i++)
{	
	scanf("%ld",&vec[i]);
	mat[i][0]=vec[i];
	log[i]=log[i/2]+1;
}
 for(j=1;j<=log[n];j++)
	for(i=1;i+(1<<(j-1))<=n;i++)
			mat[i][j]=min(mat[i][j-1],mat[i+(1<<(j-1))][j-1]);
 int k;
 for(i=1;i<=m;i++)
 {	
	scanf("%ld %ld",&x,&y);
	k=log[y-x+1];
	printf("%ld\n",min(mat[x][k],mat[y-(1<<k)+1][k]));
 }
 return 0;
}