st表其實就是運用dp思想解決rmq問題
你想解決這個區間長度 那我開乙個二維陣列dp[i][j] 長度為2^j 代表區間[i,i+2^j-1]
那麼顯而易見 我們可以繼續再分 分的基礎是什麼呢 就是[i,2^(j-1)-1],[2^(j-1)-1,,i+2^j-1]
同理是不是最後得到什麼?沒錯 就是j=0時候 那麼長度為1 就是原陣列 我再回來不就得到min了嗎?
那麼我既然是等分的 所以對我查詢的空間我一定要湊等分
顯然可以 (int)(log(i+2^j-1-i+1)) 就是這個倍數j
但是我的板子不這樣做 ps卿學姐的板子
於是就解決了
樹狀陣列也能求rmq 但是其實還好 只不過不能單點更新 只能後插入
st表板子
int d[1000006][25];//左端點為i(長度),長度為2^j,管轄了[i,i+2^j-1]
int mn[1000006];
void rmq_init()
return ret;
}
樹狀陣列這裡有個小優化 當r-l>=lowbit(r)的時候 是不是意味著我爸爸區間已經包括你兒子區間了? 我幹嘛還要繼續找兒子區間 所以就可以跳出來了 RMQ 問題及 ST 表
rmq range minimum maximum query 問題指的是一類對於給定序列,要求支援查詢某區間內的最大 最小值的問題。很顯然,如果暴力預處理的話複雜度為 o n 2 而此類問題資料又往往很大,不僅會爆時間,陣列也存不下。我們需要一種能夠 o n log n 甚至 o n 預處理的資料...
RMQ問題與ST演算法
對於問題 rmq,random maximum query 給你一串固定 不修改的數字,詢問多次某個區間內的最大值或者最小值。用樸素的想法,依次遍歷得到答案,時間複雜度為o n 但是對於多次詢問,如1e6次詢問,這樣的演算法就不是最優的了。所以出現了st演算法。st演算法的原理是動態規劃,通過o l...
模板 ST表求解RMQ問題
rm q ra ngem inim umqu ery r mq ran gemi nimu mque ry 範圍最小值問題。具體表現為一下一類問題 給出乙個 n n 個元素的陣列 a1 a2,an role presentation style position relative a1,a2,ana...