Pagini recente » Cod sursa (job #3166199) | Cod sursa (job #1849565) | Cod sursa (job #3208036) | Cod sursa (job #3147609) | Cod sursa (job #3159162)
/// rmq
#include <fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int n, y, q, a[100002], rmq[100002][20], lg;
void build() {
for (int j = 1; j <= lg; j++)
for (int i = 1; i +(1<<j) - 1 <= n; i++)
rmq[i][j] = min(rmq[i][j-1], rmq[i + (1<<(j-1))][j-1]);
}
int query(int l, int r) {
int lgth = r-l+1;
lgth = a[lgth];
return min(rmq[l][lgth], rmq[r - (1<<lgth) + 1][lgth]);
}
int main()
{
cin >> n >> q;
for (int i = 1; i <= n; i++) {
if (i != 1)
a[i] = a[i/2]+1;
cin >> rmq[i][0];
}
lg = a[n];
build();
while (q--) {
int x, y;
cin >> x >> y;
cout << query(x, y) << endl;
}
return 0;
}