Cod sursa(job #563799)

Utilizator ProcopliucProcopliuc Adrian Procopliuc Data 26 martie 2011 00:56:27
Problema Range minimum query Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.62 kb
# include <fstream>
using namespace std;
ifstream f ("rmq.in");
ofstream g ("rmq.out");
int a[100005][20],lg[100005],x,y,d,q,n,m,i,j,k;
int main ()
{
	f>>n>>m;
	for (i=1;i<=n;i++)
		f>>a[i][0];
	
	for (i=2;i<=n;i++)
		lg[i]=lg[i/2]+1;
	
	for (j=1;j<=lg[n];j++)
		for (i=1;i<=n && i+(1<<j-1)<=n;i++)
		{
			k=i+(1<<j-1);
			
			if (a[i][j-1]<a[k][j-1])
				a[i][j]=a[i][j-1];
			else
				a[i][j]=a[k][j-1];
		}
		
		for (i=1;i<=m;i++)
		{
			f>>x>>y;
			d=y-x+1;
			q=lg[d];
			if (a[x][q]<a[(y-(1<<q))+1][q])
				g<<a[x][q]<<"\n";
			else
				g<<a[(y-(1<<q))+1][q]<<"\n";
		}
		
		return 0;
}