Link to this code:
https://cses.fi/paste/a58efd6878891ee0a606a1/#include <bits/stdc++.h>
#define uwu return 0;
using namespace std;
const int SIZE = 2e5 + 5, BLK = 5e2, INF = 1e9 + 8;
int arr[SIZE], blk_min[SIZE / BLK + 5];
int query_blk(int L, int R){
if(L > R)
return INF;
int ret = INF;
for (int i = L; i <= R; i++){
ret = min(ret, blk_min[i]);
}
return ret;
}
int query_arr(int l, int r){
int ret = INF;
for (int i = l; i <= r; i++){
ret = min(ret, arr[i]);
}
return ret;
}
int main(){
int n, q;
cin >> n >> q;
for (int i = 1; i < SIZE; i++){
arr[i] = INF;
blk_min[i / BLK] = INF;
}
for (int i = 1; i <= n; i++){
cin >> arr[i];
blk_min[i / BLK] = min(blk_min[i / BLK], arr[i]);
}
for (int l, r; q--;){
cin >> l >> r;
int ans = query_blk(l / BLK + 1, r / BLK - 1);
ans = min({ans, query_arr(l, min(r, (l / BLK + 1) * BLK)), query_arr(max((r / BLK) * BLK, l), r)});
cout << ans << '\n';
}
}