Pagini recente » Cod sursa (job #2990503) | Cod sursa (job #2144800) | Cod sursa (job #1305164) | Cod sursa (job #5059) | Cod sursa (job #1172886)
#include <cstdio>
using namespace std;
int n, m, p, i, j, x, y, lg[100005], v[100005], a[100005][20];
int min(int x, int y)
{
if(x>=y) return y;
return x;
}
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", &v[i]);
p=1;
for(i=1;i<=n;i++)
{
//for(j=0;(1<<j)<=i;j++);
//lg[i]=j-1;
if((1<<p)>i) lg[i]=p-1;
else
{
++p;
lg[i]=p-1;
}
}
for(i=n;i>=1;i--)
{
a[i][0]=v[i];
for(j=1;j<=lg[n+1-i];j++)
a[i][j]=min(a[i][j-1], a[i+(1<<(j-1))][j-1]);
}
for(i=1;i<=m;i++)
{
scanf("%d%d", &x, &y);
printf("%d\n", min(a[x][lg[y-x+1]], a[y-(1<<(lg[y-x+1]))+1][lg[y-x+1]]));
}
return 0;
}