将军!!!
2025-08-05 13:51:45
发布于:上海
6阅读
0回复
0点赞
#include <iostream>
using namespace std;
typedef long long ll;
const ll N = 5e5 + 5;
const ll MAXN = __lg(N);
ll n, m;
ll logn[N];
ll a[N];
ll f[N][MAXN];
void init(){
for(int i=2; i<=n; i++) logn[i] = logn[i/2] + 1;
for(int i=1; i<=n; i++) f[i][0] = a[i];
for(int j=1; j<=MAXN; j++){
for(int i=1; i + (1 << j) - 1 <= n; i++){
f[i][j] = min(f[i][j-1], f[i + (1 << j - 1)][j-1]);
}
}
}
ll query(ll l, ll r){
ll num = r - l + 1;
ll lg = logn[num];
return min(f[l][lg], f[r - (1 << lg) + 1][lg]);
}
int main(){
cin >> n >> m;
for(int i=1; i<=n; i++){
cin >> a[i];
}
init();
while(m--){
int l, r;
cin >> l >> r;
cout << query(l, r) << " ";
}
return 0;
}
这里空空如也
有帮助,赞一个