Cod sursa(job #777849)

Utilizator ionut_blesneagIonut Blesneag ionut_blesneag Data 13 august 2012 16:27:36
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
/* Range Minimum Query*/

#include<fstream>
using namespace std;


int n,m,i,j,v[100001],kmax,log[100002];
int D[18][100001];
int x,y,k,rez;

int minimum(int a, int b)
{if(a<b)
  return a;
 return b; 
}

int main()
{freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d",&n,&m);
for(i=1; i<=n; i++)
  scanf("%d",&D[0][i]);
i=1;  
while((1<<i)<=n)  
{
for(j=1; j<=n-(1<<i)+1; j++)
   D[i][j]=minimum(D[i-1][j],D[i-1][j+(1<<(i-1))]);
i++;}

log[1]=0;
for(i=2; i<=n; i++)
  log[i]=log[i>>1]+1;

for(i=1; i<=m; i++)
{scanf("%d %d",&x,&y);
k=log[y-x+1];
rez=minimum(D[k][x],D[k][y-(1<<k)+1]);
printf("%d\n",rez);
}        
  
return 0;}