Pagini recente » Cod sursa (job #2187005) | Cod sursa (job #2671737) | Cod sursa (job #558544) | Cod sursa (job #117302) | Cod sursa (job #777849)
Cod sursa(job #777849)
/* 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;}