Pagini recente » Cod sursa (job #1273209) | Borderou de evaluare (job #1004077) | Cod sursa (job #1527716) | Cod sursa (job #1020613) | Cod sursa (job #3277039)
#include <fstream>
#include <cmath>
using namespace std;
ifstream cin ("rmq.in");
ofstream cout ("rmq.out");
int rmq[17][100005];
int main() {
int n, q;
cin >> n >> q;
for(int i = 1; i <= n; i++)
cin >> rmq[0][i];
for(int p = 1; (1<<p) <= n; p++) {
for(int i = 1; i <= n; i++) {
rmq[p][i] = rmq[p-1][i];
if(i+(1<<p-1) <= n && rmq[p][i] > rmq[p-1][i+(1<<p-1)])
rmq[p][i] = rmq[p-1][i+(1<<p-1)];
}
}
while(q--) {
int st, dr;
cin >> st >> dr;
int l = log2(dr-st+1);
cout << min(rmq[l][st], rmq[l][dr-(1<<l)+1]) << '\n';
}
}