Cod sursa(job #379209)

Utilizator GotenAmza Catalin Goten Data 30 decembrie 2009 23:00:03
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.58 kb
#include<fstream.h>
#include<iostream.h>

int n,m,i,lo,lg[100009],x,y,j,a[20][1000009],l;

int main()
{
	ifstream f("rmq.in");
	ofstream g("rmq.out");
	f>>n>>m;
	for(i=1;i<=n;i++)
		f>>a[0][i];
	lg[1]=0;
	for(i=2;i<=n;i++)
		lg[i]=lg[i>>1]+1;
	for(j=1;j<=lg[n];j++)
		for(i=1;j<=lg[n-i+1];i++)
			if(a[j-1][i]<a[j-1][i+(1<<(j-1))])
				a[j][i]=a[j-1][i];
			else
				a[j][i]=a[j-1][i+(1<<(j-1))];
	for(i=1;i<=m;i++)
	{
		f>>x>>y;
		l=y-x+1;
		lo=lg[l];
		if(a[lo][x]<a[lo][y-(1<<lo)+1])
			g<<a[lo][x]<<'\n';
		else
			g<<a[lo][y-(1<<lo)+1]<<'\n';
	}
	return 0;
}