ST演算法模板題poj3264

2021-08-06 01:44:53 字數 891 閱讀 7104

題目意為給定一串陣列,求某個區間範圍內的最大值和最小值之差。

由於詢問數量較多,並且也不涉及更新值,所以使用st求rmq預處理最大和最小。

此題用來學習st演算法,j表示包含i的i後2^j個數的最大值,可以知道,dp[i][j]可以被拆分成兩部分dp[i][j - 1]和dp[i + (1<<(j - 1))][j - 1]這樣就可以更新出所有的dp。詢問時只要求出乙個最大的j使y - x + 1大於2^j即可將詢問拆分成dp[x][j]和dp[y - (1<< j) + 1][j]。o(1)查詢就實現了。

#include 

#include

#include

#include

#include

#define rep(i, s, t) for(int i = s;i <= t;i++)

#define rap(i, s, t) for(int i = s;i >= t;i--)

using

namespace

std;

int n, q;

int a[50004];

int maxx[50004][32], minx[50004][32];

void st(int n)

int k = log(n * 1.0) / log(2.0);

rep(j, 1, k)

}}int get_ans(int x, int y)

int main()

memset(maxx, 0, sizeof(maxx));

memset(minx, 0, sizeof(minx));

st(n);

rep(i, 1, q)

}return

0;}

RMQ問題ST演算法 POJ 3264

st演算法o nlogn 預處理,o 1 的查詢指定區間的最值 以最小值為例 基本上是把待求區間 l,r 分為兩段長為len的區間 左邊一段為 l,l len 1 右邊一段為 r len 1,r len必須使得兩段區間覆蓋待求區間 設所求陣列為w 那麼,所求最小值就是兩個區間的最小值間的最小值 即m...

rmp演算法詳細介紹 poj3264

rmq range minimum maximum query 問題 rmq問題是給定乙個區間,求這個區間中的最大或最小值的問題 rmq採用動態規劃的思想來求解 st演算法 square table 預處理 預處理使用 dp的思想,f i,j 表示 i,i 2 j 1 區間中的最小值。例如,f 0,...

對於POJ3264的思考

嗯嗯poj3264就是你啦 題目大意 給定區間多次求區間最大值最小值之差 線段樹維護 開始寫了,但願能跑個好名次嘿嘿嘿 北大郭老 郭煒 的歷程用堆式線段樹,那好吧,那我也寫堆式的正好不用指標了 不過他的歷程足足跑了3秒我覺的不太靠譜阿你說呢 結果 我只比他少了200ms還是資料讀入優勢 includ...