Pagini recente » Cod sursa (job #166295) | Cod sursa (job #303057) | Cod sursa (job #1311429) | Cod sursa (job #427124) | Cod sursa (job #1664863)
#include <iostream>
#include <fstream>
using namespace std;
const int N = 100001;
const int L = 17;
ifstream f("rmq.in");
int n, log[N], r[N][L];
int getMin(int a, int b){
int l = log[b-a+1];
return min(r[b][l], r[a+(1<<l)-1][l]);
}
int main()
{
int i, j, k, m, a, b;
f >> n >> m;
for(i = 1; i <= n; i++){
f >> r[i][0];
log[i] = log[i/2] + 1;
}
for(i = 1; i <= n; i++){
for(j = 1; (1 << j) <= i; j++){
k = i - (1 << (j-1));
r[i][j] = min(r[i][j-1], r[k][j-1]);
}
}
for(i = 1; i <= m; i++) f >> a >> b, cout << getMin(a, b) << "\n";
return 0;
}