Cod sursa(job #354178)

Utilizator funkydvdIancu David Traian funkydvd Data 7 octombrie 2009 12:07:10
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 kb
#include<fstream>
#define N 1<<17
#define M 1<<5
inline int min (int x, int y)
{
	if (x<y) return x;
	return y;
}
using namespace std;
int v[N],log[N], mat[M][N];	 
ifstream f1 ("rmq.in");
ofstream f2 ("rmq.out");
int main()
{
int n,m,a,b,i,j,p,q;
f1>>n>>m;
log[1]=0;
for (i=1; i<=n; i++) f1>>v[i];
for (i=2; i<=n; i++) log[i]=log[i/2]+1;
for (i=1; i<=n; i++) mat[0][i]=v[i];
for (i=1; (1<<i)<=n; i++) 
{
p=1<<i;
q=1<<(i-1);
for (j=1; j<=n-p+1; j++) mat[i][j]=min(mat[i-1][j],mat[i-1][j+q]);
}
for (i=1; i<=m; i++)
{
 f1>>a>>b;
 p=log[b-a+1];
 q=1<<p;
 f2<<min(mat[1][a],mat[1][b-q+1])<<"\n";
}
 return 0;
}