Pagini recente » Cod sursa (job #512229) | Cod sursa (job #581135) | Cod sursa (job #1951610) | Cod sursa (job #2420587) | Cod sursa (job #2360573)
#include <cstdio>
#include <iostream>
#include <cmath>
#define NMAX 100005
using namespace std;
int M[400];
int v[NMAX], nrG;
int getMin(int st, int dr, int rad){
int minn = (1 << 30);
for(int i = st; i <= dr; ++i){
if((i - 1) % rad == 0){
minn = min(minn, M[i / rad + 1]);
i += rad;
--i;
}
else
minn = min(minn, v[i]);
}
return minn;
}
int main()
{
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
int n, k;
scanf("%d%d", &n, &k);
int minn = (1 << 30);
int r = sqrt(n);
int nr = 0;
for(int i = 1; i <= n; ++i){
scanf("%d", &v[i]);
minn = min(minn, v[i]);
++nr;
if(nr == r){
M[++nrG] = minn;
minn = (1 << 30);
nr = 0;
}
}
if(nr != 0)
M[++nrG] = minn;
for(int i = 1; i <= k; ++i){
int st, dr;
scanf("%d%d", &st, &dr);
printf("%d\n", getMin(st, dr, r));
}
return 0;
}