线段树什么的最讨厌了
Description
小Y 最近學習了線段樹,但是由于她的智商比較低,運用的還不是很熟練。于是小R 給了她一點練習題訓練,其中有一道是這樣的。
這是小R 寫的線段樹的一段建樹代碼:
只要調用buildtree(1,0,n) 就可以得到一顆線段樹了。顯然,一顆線段樹一共有O(n) 個節點,因為每一個節點都代表了一個不同的區間,所以線段樹上一共出現了O(n) 個不同的區間。
現在小R 給了你一個區間[l; r],他想要你告訴他一個最小的n 使得區間[l; r] 出現在了用buildtree(1,0,n) 建出來的線段樹中。
Input
第一行輸入一個正整數T 表示數據組數。
接下來T 行每行三個整數L;R; lim 表示一組詢問,如果對于所有的0 <= n <= lim 都不存在滿足條件的解,輸出-1 即可。
Output
對于每組詢問輸出一個答案。
Sample Input
2
0 5 10
6 7 10
Sample Output
5
7
Data Constraint
.
.
.
.
.
分析
我們可以從該區間逆向推它的父節點
以該區間為左子樹或為右子樹
共有四種情況:
q=y-x+1;
dfs(x-q,y);
dfs(x-q-1,y);
dfs(x,y+q-1);
dfs(x,y+q);
一定注意剪枝,沒做好可能會直接爆蛋
.
.
.
.
.
程序:
轉載于:https://www.cnblogs.com/YYC-0304/p/10458953.html
總結
以上是生活随笔為你收集整理的线段树什么的最讨厌了的全部內容,希望文章能夠幫你解決所遇到的問題。