伸展樹的構建和最基本的插入與查詢

2021-07-04 13:19:08 字數 827 閱讀 5988

描述

tiger最近被公司公升任為營業部經理,他上任後接受公司交給的第一項任務便是統計並分析公司成立以來的營業情況。tiger拿出了公司的賬本,

賬本上記錄了公司成立以來每天的營業額。分析營業情況是一項相當複雜的工作。由於節假日,大減價或者是其他情況的時候,營業額會出現

一定的波動,當然一定的波動是能夠接受的,但是在某些時候營業額突變得很高或是很低,這就證明公司此時的經營狀況出現了問題。

經濟管理學上定義了一種最小波動值來衡量這種情況:

該天的最小波動值 = min

void rotate(int x,int kind)

void splay(int r,int goal)//看splay**前看看我推薦的部落格,看懂了對下面的操作會更容易理解

else

} }root=r;//根節點更新成為當前的節點標號,當前的節點已經旋轉成根節點

}int insert(int k)

int get_next(int x)//找右子樹最小的值

int get_pre(int x)//同上

int main()

if(!insert(num))continue;//判斷是否輸入過相同的值,若有,則當天波動值一定是0,不用再查詢

int a=get_next(root);//若沒有輸入過相等的值,則查詢其左子樹中的最大值和右子樹中的最小值,求出它們和當天值的差的絕對值,更小的那個為當天波動值

int b=get_pre(root);

ans+=min(a,b);

} printf("%d\n",ans);

} return 0;

}

php最基本的增刪改查

請選擇暱稱 header content type text html charset utf 8 接收表單值 empty post names names names post names empty post text text text post text 連線資料庫 選擇資料庫 寫sql語句...

線段樹的構建和查詢

本系列函式引數表示為 k 節點儲存區間 l,r 的和,查詢 修改的點為 x 查詢 修改的區間為 x,y 我們從線段樹的定義可以知道,k 節點儲存 ls k 和 rs k 兩節點的和。所以,我們採用遞迴構建線段樹。當區間的左端點與右端點重合時,即為葉子結點。非葉子結點在回溯中計算出。void buil...

伸展樹的學習(四) 在已知的序列中任何位置插入資料

前面講解了伸展樹的原始姿態 二叉搜尋樹!這篇文章呢就講解一下伸展樹的兩種操作 右旋 zag 和左旋 zig 操作 伸展樹右旋的圖示 旋轉的結果就是 使結點t的位置向上移動 人往高處走嘛 右旋有乙個前提 結點t是結點f的左孩子!根據二叉搜尋樹的性質 各結點滿足以下不等式 a旋轉後,這個等式也不能變!這...