題意:
給出一些節點,每個節點有兩個值,lable和priority,要求構成乙個笛卡爾樹,按lable是二叉排序樹,按priority是大根堆(不一定完全二叉樹)。輸出括號表示。
思路:沒什麼好說的,完全自己獨立寫的**,除了讀入參考了rainy days的,其他都是獨立創造的~自我感覺寫的還可以~
(抑鬱,把括號表示法搞反了,糾結了好久,外面的括號越少的是堆頂!
又一直以為只有乙個字母,又糾結了好久,可以是乙個字串!)
讀入說明見:
ps:字串s是二叉排序樹結構,權值w是大根堆結構!
view code
1 #include 2 #include 3 #include 4 #include 5 #include 67#define size 101
8#define n 50500910
using
namespace
std;
1112
struct
po13
po[n];
1718
struct
tr19
tr[n*2
];22
23int n,lg[n],pn[n][20
],cnt;
2425 inline bool cmp(const po &a,const po &b)
2629
30void
read()
3136
37 inline int jmax(int x,int
y)38
4243 inline int askmax(int l,int
r)44
4849
void
init_rmq()
5056
57void create(int u,int l,int
r)58
67if(r>=pos+1)68
72}7374
void dfs(int
u)75
8384
void
go()
8593
94int
main()
95103
return0;
104 }
poj 2201 RMQ 笛卡爾樹
給出一些結點 每個節點有兩個關鍵字 要求構造一棵樹 第乙個關鍵字滿足二叉搜尋樹的性質,第二個關鍵字滿足小堆的性質 解題思路 這道題我開始是用第二關鍵字從小到大排序,然後從1 n去新增節點。這樣是符合最小堆的性質,假設新增第i個節點,那麼首先去找 1,i 1 這段區間的第一關鍵字的最小值和最大值,如果...
POJ 2201 笛卡爾樹 RMQ
題意 題目大意 讓你構造一棵笛卡爾樹。笛卡爾樹的節點含有2個值,1個key,乙個value,其中key是主鍵,value是輔鍵。一棵笛卡爾樹就是 key公升序,value公升序或者降序。類似堆。判斷能否構成。ps 此題保證資料相異,必然能夠成 view code 1 include 2 includ...
poj 2201 笛卡爾樹
題意 給定n個二元組 ai,bi 構造笛卡爾樹。按a元素為二叉排序樹,按b元素為小頂堆。思路 用棧當然可以,此處用了rmq來做。另外需要注意笛卡爾樹和treap的區別 treap與笛卡爾樹在結構上是相同的,只是兩者的應用不同。treap的value是隨機值,是為了使樹更加平衡引進的,而笛卡爾樹的va...