RMQ问题
1.线段树
2.st算法
预处理\(O(nlog(n))\) 查询\(O(1)\)
具体思想倍增
原因,最小值多可怜不影响结果,所以两个区间覆盖的重复区域不影响
#include<bits/stdc++.h>
using namespace std;
const int maxn = 200000;
int d[maxn][100];
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i = 1;i <= n;i++) scanf("%d",&d[i][0]);
for(int j = 1;(1<<j) <= n;j++){
for(int i = 1;i+(1<<j)-1<= n;i++){
d[i][j] = min(d[i][j-1],d[i+(1<<(j-1))][j-1]);
}
}
for(int i = 1;i <= m;i++){
int L,R;
scanf("%d%d",&L,&R);
int k = 0;
while((1<<(k+1)) <= (R-L+1)) k++;
printf("%d ",min(d[L][k],d[R-(1<<k)+1][k]));
}
return 0;
}
3.树状数组

浙公网安备 33010602011771号