RMQ的問題

最近看了rmq,先學的的st算法,實際就是用動態規劃來解的。

設狀態d[i][j]表示從第i個位置起,2^j個數的最大值。狀態轉移方程:d[i][j] = max(d[i][j - 1], d[i + (1 << (j - 1))][j - 1]);初始狀態d[i][j] = w[i][j](w[i][j]表示要求的數組),複雜度爲O(n*logn)的預處理,O(1)的查詢,

題目:POJ 3264,可以完全套上面的方程

POJ 3369,預處理的時候加一個處理兩個端點的條件,查詢也加上

上面的都是一維的情況,也可以處理二維的情況。

題目:POJ 2019 這個題目比較特殊,查詢的都是正方形,而且邊長固定。可以設d[i][j][k]表示從第i行,第j列位起,2^j爲正方形邊長的最大值。狀態轉移方程:d[i][j][k] = max(max(d[i][j][k - 1], d[i + (1 << (k - 1))][j][k - 1]), max(d[i][j + (1 << (k - 1))][k - 1], d[i + (1 << (k - 1))][j + (1 << (k - 1))][k - 1]);));;初始狀態d[i][j][0] = w[i][j](w[i][j]表示要求的數組),複雜度爲O(n*n*logb)的預處理,O(1)的查詢,當然如果不是正方形,還要再加一維,就可以表示行列的長度,複雜度爲O(n*n*logb * log(b))。不過很可惜,這道題的規模實在太小,直接暴力也能過。

發佈了113 篇原創文章 · 獲贊 12 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章