範圍最小值(RMQ)問題

2022-02-13 11:45:35 字數 556 閱讀 2313

問題:

給出乙個n個元素的陣列,a[1], a[2], …… , a[n],設計乙個資料結構,支援查詢操作rmq(l, r),計算min。

分析:迴圈計算會超時,用tarjan的sparse-table演算法,預處理時間是o(nlogn),查詢只需要o(1)。

令d[i][j]表示從i開始,長度為2的j次方的一段元素的最小值。

則d[i][j] = min(d[i][j-1], d[i+(1<<(j-1)][j-1])。

**:

#include #include 

//#include

using

namespace

std;

const

int max = 100

;int n, a[max+10

];int d[max+10][max+10];//

二維應該是floor(log(1.0*max)/log(2.0)),但是不知為什麼編譯有問題。。

int rmq(int l, int

r)int

main()

範圍最小值問題(RMQ)

給出乙個n個元素的陣列 tarjan的sparse table演算法 include includeusing namespace std const int maxn 10005 int a maxn d maxn 20 d i j 為以a i 為起點,長度為2 j的一段元素中的最小值 遞推公式d...

最大值最小值問題

看了不是很懂,先把別人的 放著,日後在研究。程式8 3 5.cpp 定義控制台應用程式的入口點。include stdafx.h 目標學會用猜數字 二分 的方法,換個角度來解決問題 include include includeconst int maxn 100000 int a maxn n,m...

棧找最小值問題

question 實現乙個特殊的棧,在實現棧的基本功能的基礎上,在實現回棧中最小元素的操作 thinking sketch 定義倆個棧。同時壓入同時彈出,比如說乙個data,乙個min,當data棧新壓入的數大於min的棧頂,重複壓入min棧頂數 detailed 分別定義data,min倆個棧,p...