Cod sursa(job #303544)

Utilizator HaggisRanca Razvan Haggis Data 9 aprilie 2009 23:04:35
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream in("grader2.in");
ofstream out("rmq.out");
int n,m,a[100005],x,y,v[100005][20],i,j;

int main ()
{
	in>>n>>m;
	for(i=0;i<n;i++)
	{
		in>>a[i];
		v[i][0]=i;
	}
	i=0;
	for(j=1;1<<j<=n;j++)
		for(i=0;i+(1<<j)-1<n;i++)
		{
			if(a[v[i][j-1]]<a[v[i+(1<<(j-1))][j-1]])
				v[i][j]=v[i][j-1];
			else
				v[i][j]=v[i+(1<<(j-1))][j-1];
		}
			
	for(i=1;i<=m;i++)
	{
		in>>x>>y;
		--x;
		--y;
		if(y==x)
			out<<a[x]<<"\n";
		else
		{
			int c=1;
			int cont=0;
		if(c<y)
		{
			do
		{
			c*=2;
			cont++;
		}
		while(c<y-x+1);
		c/=2;
		--cont;
		}
		
		if(a[v[x][cont]]<a[v[y-c+1][cont]])
			out<<a[v[x][cont]]<<"\n";
		else
			out<<a[v[y-c+1][cont]]<<"\n";
		}
	}
	return 0;
}