Pagini recente » Cod sursa (job #2600942) | Cod sursa (job #1047965) | Cod sursa (job #169905) | Cod sursa (job #1577318) | Cod sursa (job #1016781)
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
const int nmax = int(1e5) + 2;
int rmq[18][nmax];
int lg[nmax];
int n, m;
inline int query(const int &a,const int &b) {
int l = lg[b - a + 1];
return min(rmq[l][a],rmq[l][b - (1<<l) + 1]);
}
int main()
{
freopen("rmq.in","r",stdin);
freopen("rmq.out","w",stdout);
scanf("%d %d",&n,&m);
for(int i = 1;i <= n;i++) {
scanf("%d",&rmq[0][i]);
lg[i + 1] = lg[(i + 1)>>1] + 1;
}
for(int i = 1;(1<<i) <= n;i++) {
for(int j = 1;j <= n - (1<<i) + 1;j++) {
rmq[i][j] = min(rmq[i - 1][j],rmq[i - 1][j + (1<<(i - 1))]);
}
}
int a, b;
for(int i = 1;i <= m;i++) {
scanf("%d %d",&a,&b);
printf("%d\n",query(a,b));
}
return 0;
}