Pagini recente » Cod sursa (job #1853395) | Cod sursa (job #2180093) | Cod sursa (job #954121) | Cod sursa (job #669182) | Cod sursa (job #2772105)
#include <stdio.h>
#include <bits/stdc++.h>
#define rep(i, n) for(int i = 0; i < (int)(n); i++)
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<ll> vll;
int main(void) {
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
int n,m;
cin >> n >> m;
vi a(n), lg(n+1);
rep(i, n) { cin >> a[i]; }
lg[1] = 0;
for(int i = 2; i <= n; i++) { lg[i] = lg[i/2] + 1; }
int K = lg[n];
vector<vi> mn(K+1, vi(n));
copy(a.begin(), a.end(), mn[0].begin());
for(int k = 1; k <= K; k++) {
for(int i = 0; i + (1<<(k-1)) < n; i++) {
mn[k][i] = min(mn[k-1][i], mn[k-1][i + (1<<(k-1))]);
}
}
int l,r;
while(m--) {
cin >> l >> r;
--l;
int step = lg[r-l];
cout << min(mn[step][l], mn[step][r-(1<<step)]) << "\n";
}
return 0;
}