Pagini recente » Cod sursa (job #612879) | Cod sursa (job #1061340) | Cod sursa (job #1708636) | Cod sursa (job #1732898) | Cod sursa (job #715914)
Cod sursa(job #715914)
#include<cstdio>
#include<cmath>
int m[100005][20];
int lg[100005];
int v[100005];
int main()
{
freopen ("rmq.in","r",stdin);
freopen ("rmq.out","w",stdout);
int n,mm;
scanf ("%d%d",&n,&mm);
for(int i=0;i<n;i++){
scanf ("%d",v+i);
lg[i]=log2 (i);
m[i][0]=i;
}
lg[n]=log2 (n);
for(int j=1;1<<j<=n;j++)
for(int i=0;i+(1<<j)-1<n;i++){
if(v[m[i][j-1]]<v[m[i+(1<<(j-1))][j-1]])
m[i][j]=m[i][j-1];
else
m[i][j]=m[i+(1<<(j-1))][j-1];
}
while(mm--){
int x,y;
scanf ("%d%d",&x,&y);
x--;
y--;
int k=lg[y-x+1];
if(v[m[x][k]]<=v[m[y-(1<<k)+1][k]])
printf ("%d\n",v[m[x][k]]);
else
printf ("%d\n",v[m[y-(1<<k)+1][k]]);
}
return 0;
}