Pagini recente » Cod sursa (job #2382885) | Cod sursa (job #172328) | Cod sursa (job #2068259) | Cod sursa (job #162068) | Cod sursa (job #1001343)
#include<cstdio>
using namespace std;
int v[100001],log[100001];
int a[100001][25];
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
int n,m,i,j,e,l,k,sol;
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
for(i=1;i<=n;i++)
a[i][0]=i;
for (j = 1; 1 << j <= n; j++)
for (i = 0; i + (1 << j) - 1 < n; i++)
if (v[a[i][j - 1]] < v[a[i + (1 << (j - 1))][j - 1]])
a[i][j] = a[i][j - 1];
else
a[i][j] = a[i + (1 << (j - 1))][j - 1];
e=0;
l=1;
for(i=1;i<=n;i++)
{
if(i>=l*2)
{
l=l*2;
e++;
}
log[i]=e;
}
for(i=1;i<=m;i++)
{
scanf("%d %d",&i,&j);
k=log[j-i+1];
sol=0;
if(v[a[i][k]]<=v[a[j-(1<<k)+1][k]])
sol=v[a[i][k]];
else
sol=v[a[j-(1<<k)+1][k]];
printf("%d\n",sol);
}
return 0;
}