ps:
介紹:rmq演算法,是乙個快速求區間最值的離線演算法,預處理時間複雜度o(n*log(n)),查詢o(1),所以是乙個很快速的演算法,當然這個問題用線段樹同樣能夠解決。
1、求區間的最大值和最小值!
**如下:
#include #include #include #include using namespace std;
const int maxn = 100117;
int n,query;
int num[maxn];
int f_min[maxn][20],f_max[maxn][20];
void init()
for(int i = 1; (1<
2、求區間內出現次數最多的數字出現的次數!
**如下:
#include #include #include using namespace std;
const int maxn = 100017;
int num[maxn], f[maxn], max[maxn][20];
int n;
int max(int a,int b)
int rmq_max(int l,int r)
{ if(l > r)
return 0;
int k = log((double)(r-l+1))/log(2.0);
return max(max[l][k],max[r-(1<
RMQ 區間最值 模板
rmq 的全稱為range max min query。構造dp陣列的時間為o nlogn 但是查詢時間為o 1 所以當資料量小於logn時,用樸素遍歷找最值就好,但是請求次數大於logn時,就要用這個模板。利用動態規劃的思想。int order maxn 使每乙個2 order i i 2 ord...
模板 RMQ求區間最值
rmq簡單來說就是求區間的最大值 最小值 核心演算法 動態規劃 rmq 以下以求最大值為例 f i,j 表示 從 i 開始 到i 2j 1這個區間中的最大值 狀態轉移方程 f i,j max f i,j 1 f i 2 j 1,j 1 我們可以把區間 i,i 2j 1 平均分為兩個區間,因為j 1的...
st演算法模板(區間最值)
f 1,0 表示第1個數起,長度為2 0 1的最大值,其實就是3這個數。f 1,2 5,f 1,3 8,f 2,0 2,f 2,1 4 從這裡可以看出f i,0 其實就等於a i 這樣,dp的狀態 初值都已經有了,剩下的就是狀態轉移方程。我們把f i,j j 1 平均分成兩段 因為j 1時,f i,...