問題:
給出乙個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...