Cod sursa(job #418914)

Utilizator Andrei_ScorpioAndreiana Andrei Daniel Andrei_Scorpio Data 16 martie 2010 17:53:58
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include<stdio.h>
#define Nmax 100100

long mat[20][Nmax];
int min(long a,long b)
{
 if(a<b)
	return a;
 else
	return b;
}
int main()
{
 long log[Nmax];
 long n,m,vec[Nmax],x,y;
 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[0][i]=vec[i];
	log[i]=log[i>>1]+1;
}
 for(j=1;j<=log[n];j++)
	for(i=1;i+(1<<(j-1))<=n;i++)
			mat[j][i]=min(mat[j-1][i],mat[j-1][i+(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[k][x],mat[k][y-(1<<k)+1]));
 }
 return 0;
}