Pagini recente » Cod sursa (job #2007022) | Cod sursa (job #2592181) | Cod sursa (job #2471698) | Cod sursa (job #3342443) | Cod sursa (job #3348054)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
const int mxN = 1e5 + 1, mxJ = 20, oo = 1e5 + 1;
int rmq[mxN][mxJ], n, q;
void init(){
long long ind = 1, aux = 2;
while(aux <= n){
for(int i = 1; i + aux - 1 <= n; i++)
rmq[i][ind] = min(rmq[i][ind - 1], rmq[i + aux / 2][ind - 1]);
ind++;
aux = (1 << ind);
}
}
int compute(int l, int r){
int ans = rmq[l][0], aux = 0;
while(r){
if(r % 2){
ans = min(ans, rmq[l][aux]);
l += (1 << aux);
}
aux++;
r /= 2;
}
return ans;
}
int main(){
fin >> n >> q;
for(int i = 1; i <= n; i++)
fin >> rmq[i][0];
init();
for(int i = 1; i <= q; i++){
int a, b;
fin >> a >> b;
fout << compute(a, b - a + 1) << "\n";
}
}