Cod sursa(job #252004)

Utilizator P1gl3TGilca Mircea Alexandru P1gl3T Data 3 februarie 2009 19:20:25
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.6 kb
#include<cstdio>
int main()
{
	freopen("rmq.in","r",stdin);
	freopen("rmq.out","w",stdout);
	
	int i,j,n,t,p,u;
	int m[17][100001];
	scanf("%d%d",&n,&t);
	
	for(i=0;i<n;++i)
		scanf("%d",&m[0][i]);
	for(j=1; (1<<j)<=n; ++j)
		for(i=0; i + (1<<j) -1 < n; ++i)
			if(m[j-1][i]<m[j-1][i+(1<<(j-1))])
				m[j][i]=m[j-1][i];
			else
				m[j][i]=m[j-1][i+(1<<(j-1))];
	while(t--)
	{
		scanf("%d%d",&p,&u);
		--p; --u;
		i=u-p+1;
		j=0;
		while(i){ ++j; i>>=1; }
		--j;
		if(m[j][p]<m[j][u-(1<<j)+1])
			printf("%d\n",m[j][p]);
		else
			printf("%d\n",m[j][u-(1<<j)+1]);
	}
	return 0;
}