Pagini recente » aaaaaaa | Cod sursa (job #1533248) | Cod sursa (job #1554343) | Cod sursa (job #2048361) | Cod sursa (job #1687195)
#include <bits/stdc++.h>
using namespace std;
const int nmax = 1e5 + 10;
const int maxLog = 16;
int n , m , i;
int Log[nmax];
int r[maxLog+1][nmax];
void bagarmq()
{
for (int i = 1; (1 << i) <= n; ++i)
for (int j = 1; j <= n - (1 << i) + 1; ++j)
r[i][j] = min(r[i-1][j] , r[i-1][j+(1<<i)-1]);
}
int getmin(int left , int right)
{
int k = Log[right-left+1];
return min(r[k][left] , r[k][right-(1<<k)+1]);
}
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", &r[0][i]);
bagarmq();
for (i = 2; i <= n; ++i) Log[i] = Log[i>>1] + 1;
for (i = 1; i <= m; ++i)
{
int l , r;
scanf("%d %d", &l, &r);
printf("%d\n", getmin(l , r));
}
return 0;
}