Pagini recente » Cod sursa (job #2111590) | Cod sursa (job #1164179) | Monitorul de evaluare | Cod sursa (job #1852420) | Cod sursa (job #2484888)
#include <bits/stdc++.h>
using namespace std;
//#pragma GCC optimize ("O3")
//#pragma GCC target ("sse4")
#define endl "\n"
#define pb push_back
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
const ll mod = 1e9 + 7;
const ll MAX_N = 1e5 + 10, MAX_LOG = 18;
ll a[MAX_N], p[MAX_N][MAX_LOG];
ll query(int l, int r) {
int st = -1;
ll ps = 1;
while(ps <= (r - l + 1)) {
st ++;
ps *= 2ll;
}
return min(p[l][st], p[r - (1ll << st) + 1][st]);
}
int main() {
//ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
ofstream myfile;
myfile.open ("rmq.out");
ifstream myFileIn;
myFileIn.open ("rmq.in");
int n, q;
myFileIn >> n >> q;
for(int i = 0; i < n; i ++) {
myFileIn >> a[i];
}
///Precomputing
for(int k = 0; k < n; k ++) {
p[k][0] = a[k];
}
for(int j = 1; (1ll << j) < n; j ++) {
for(int k = 0; k + (1ll << j) <= n; k ++) {
p[k][j] = min(p[k][j - 1], p[k + (1ll << (j - 1))][j - 1]);
}
}
while(q --) {
int l, r;
myFileIn >> l >> r;
myfile << query(l - 1, r - 1) << endl;
}
return 0;
}