Pagini recente » Cod sursa (job #1396670) | Cod sursa (job #1984032) | Cod sursa (job #2470171) | Cod sursa (job #2715031) | Cod sursa (job #1389461)
#include <cstdio>
using namespace std;
int n,t,i,a[100001],m[100001][19],k,j,r,rez;
int power2 (int x){return 1<<x;}
int log2 (int x)
{
int y=0;
while (x){x/=2; y++;}
return y-1;
}
int main ()
{
freopen ("rmq.in","r", stdin);
freopen ("rmq.out","w", stdout);
scanf("%d%d",&n,&t);
for (i=1; i <=n; i++)
{
scanf ("%d",&a [i]);
m[i][0]=i;
}
k=log2 (n);
for (j=1; j<=k; j++)
{
r=power2 (j);
for (i=1; i <=n-r+1; i++)
{
if(a[m[i][j-1]]<a[m[i+r/2][j-1]]){m[i][j]= m[i][j-1];}
else{ m[i][j]= m[i+r/2][j-1];}
}
}
while (t--)
{
scanf ("%d%d",&i,&j);
k=log2 (j-i+1); r=power2 (k);
if (a [m [i][k]]<a [m[j-r+1][k]]){rez=m[i][k];}
else {rez=m[j-r+1][k];}
printf ("%d\n", a[rez]);
}
return 0;
}