Pagini recente » Cod sursa (job #708814) | Istoria paginii runda/quarter_2018 | Cod sursa (job #1021597) | Cod sursa (job #994261) | Cod sursa (job #2928752)
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 2;
const int lg = 20;
ifstream in ("rmq.in");
ofstream out("rmq.out");
#define cin in
#define cout out
int sp[maxn][lg]; // sp[i][j] - > elementul minim pe intervalul [i, i + 2^j - 1]
void solve(){
}
int main(){
// pow(2, k) = 1 << k;
ios::sync_with_stdio(0); cin.tie(0);
int n,m;
cin >> n >> m;
for (int i = 0; i < n; i++){
cin >> sp[i][0];
}
for (int k = 1; k < lg; k++){
for (int i = 0; i + (1 << k) - 1 < n; i++) {
sp[i][k] = min(sp[i][k-1], sp[i + (1 << (k - 1))][k-1]);
}
}
while (m--) {
int l, r;
cin >> l >> r;
r--, l--;
int k = log2(r - l + 1);
cout << min(sp[l][k], sp[r - (1 << k) + 1][k]) << "\n";
}
return 0;
}