Pagini recente » Cod sursa (job #1452648) | Cod sursa (job #119966) | Cod sursa (job #1123676) | Cod sursa (job #105324) | Cod sursa (job #1172883)
#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=0;
for(i=1;i<=n;i++)
if((1<<p)>=i) lg[i]=p;
else
{
p++;
lg[i]=p;
}
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]], a[y-(1<<(lg[y-x]))+1][lg[y-x]]));
}
return 0;
}