LZN樹 強於平衡樹

2021-05-25 10:33:14 字數 1260 閱讀 3763

圓錐玩具

問題描述

xqz小朋友家中堆積了好多好多種玩具,其中一種便是圓錐玩具。他經常將這類玩具混亂的擺在地上,欣賞內在的排列美。

他先把圓錐垂直放在地面上。這些圓錐都有乙個特點,就是它的半徑等於高度,且內部是空心的,底面也是空的。xqz小朋友有時會將其中的一些小的圓錐玩具放到比它大的圓錐玩具裡,如果乙個圓錐玩具不被另外任意乙個圓錐完全包裹著,xqz就會格外喜歡它(…)。

你的任務便是幫助xqz小朋友找出所有他格外喜歡的玩具。(特別的,如果兩個圓錐的底面相切,小的圓錐也算被包裹著)為了簡化模型,我們將地面抽象成二維平面。

輸入檔案

第一行乙個正整數n,表示玩具個數。

接下來n行,每行3個實數,ri

,xi,yi

,表示圓錐底面的半徑和座標。(其中hi=ri

,hi表示圓錐的高度),第i行為第i個玩具。

輸入資料僅保證任意兩個圓錐的底面不相交且不重合,不保證不相切。

輸出檔案

第一行乙個數m,表示xqz格外喜歡的玩具的個數。

第二行m個數,輸出玩具的編號,從小到大輸出,以空格隔開。

輸入樣例

5 1 0 -2

3 0 3

10 0 0

1 0 1.5

10 50 50

輸出樣例

2 3 5

資料規模和約定

對於20%的資料,n ≤ 500。

對於100%的資料,n ≤ 100000,-109 ≤

ri,xi

,yi≤ 109

,ri為正數。

本來要用平衡樹的一道題,被lzn樹給解決了,瞬間壓了**,有興趣的同學可以去試試打平衡樹。

本樹由lzn大牛發明,故命名為lzn樹......

lzn樹核心思想:

以每個圓的最左邊的端點為第一關鍵字,半徑為第2關鍵字,快排一便。

然後從左至右搜,一旦超出範圍即可break。

效率的話,我用多組資料測試過了,雖然理論複雜度是n^2,但由於lzn樹的特殊優化性,可以將實際複雜度壓至理論的1/12000左右,甚至超過了打平衡樹的同學,在所有測試點中,平均比平衡樹快大約2倍,感謝lzn大牛! 

猥瑣的標程:

平衡樹一 Splay樹

rt totfa i chival i cnt i size i 根節點編號 節點個數 父親左右兒子編號 節點權值 權值出現次數 子樹大小 maintain x 在改變節點位置後,將節點x的size更新 get x 判斷節點x是父親節點的左孩子還是右孩子 clear x 銷毀節點x void mai...

Tyvj P1728 普通平衡樹 平衡樹

題目鏈結 p1728普通平衡樹 此為平衡樹系列第一道 普通平衡樹 1.插入x數 2.刪除x數 若有多個相同的數,因只刪除乙個 3.查詢x數的排名 若有多個相同的數,因輸出最小的排名 4.查詢排名為x的數 5.求x的前驅 前驅定義為小於x,且最大的數 6.求x的後繼 後繼定義為大於x,且最小的數 第一...

二逼平衡樹 樹套樹(線段樹套Splay平衡樹)

題面 bzoj3196 解析線段樹和splay兩棵樹套在一起,常數直逼inf,但最終僥倖過了 思路還是比較簡單,在原陣列維護乙個下標線段樹,再在每乙個線段樹節點,維護乙個對應區間的權值splay。簡單說一下操作 0.提取區間 1.查詢區間內k的排名 提取區間,找到區間內所有的splay,分別比k小的...