Pagini recente » Cod sursa (job #207188) | Cod sursa (job #1179252) | Cod sursa (job #2052180) | Monitorul de evaluare | Cod sursa (job #3254421)
#include "bits/stdc++.h"
const int SIZE = 100000;
const int LOG = 20;
int rmq[SIZE + 5][LOG + 5], n, m;
void Build(){
for(int k = 1; k <= LOG; k++){
for(int i = 1; i + (1 << k) <= n + 1; i++){
rmq[i][k] = std :: min(rmq[i][k - 1], rmq[i + (1 << (k - 1))][k - 1]);
}
}
}
int Query(int left, int right){
int sz = (right - left + 1);
int logg = log2(sz);
return std :: min(rmq[left][logg], rmq[right - (1 << logg) + 1][logg]);
}
void Solve(){
std :: cin >> n >> m;
for(int i = 1; i <= n; i++){
std :: cin >> rmq[i][0];
}
Build();
while(m -- ){
int left, right;
std :: cin >> left >> right;
std :: cout << Query(left, right) << '\n';
}
}
signed main(){
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
std :: ios_base :: sync_with_stdio(false);
std :: cin.tie(0);
std :: cout.tie(0);
Solve();
return 0;
}