POJ 2201 笛卡爾樹 RMQ

2022-05-24 04:18:08 字數 971 閱讀 6712

題意:

題目大意:

讓你構造一棵笛卡爾樹。

笛卡爾樹的節點含有2個值,1個key,乙個value,其中key是主鍵,value是輔鍵。一棵笛卡爾樹就是:key公升序,value公升序或者降序。類似堆。

判斷能否構成。(ps:此題保證資料相異,必然能夠成)

view code

1 #include 2 #include 3 #include 4 #include 5 #include 6

7#define n 20000089

using

namespace

std;

1011

struct

po12

po[n];

1516

struct

tree

17tr[n*2

];20

21int pn[n][20

],lg[n],n;

2223 inline bool cmp(const po &a,const po &b)

2427

28 inline int jmin(int x,int

y)29

3334 inline int askmin(int l,int

r)35

3940

void

init_rmq()

4147

48void

read()

4955 sort(po+1,po+1+n,cmp);

56init_rmq();57}

5859

int create(int u,int l,int

r)60

6970

void

go()

7177

78int

main()

7987

return0;

88 }

poj 2201 笛卡爾樹

題意 給定n個二元組 ai,bi 構造笛卡爾樹。按a元素為二叉排序樹,按b元素為小頂堆。思路 用棧當然可以,此處用了rmq來做。另外需要注意笛卡爾樹和treap的區別 treap與笛卡爾樹在結構上是相同的,只是兩者的應用不同。treap的value是隨機值,是為了使樹更加平衡引進的,而笛卡爾樹的va...

poj 2201 RMQ 笛卡爾樹

給出一些結點 每個節點有兩個關鍵字 要求構造一棵樹 第乙個關鍵字滿足二叉搜尋樹的性質,第二個關鍵字滿足小堆的性質 解題思路 這道題我開始是用第二關鍵字從小到大排序,然後從1 n去新增節點。這樣是符合最小堆的性質,假設新增第i個節點,那麼首先去找 1,i 1 這段區間的第一關鍵字的最小值和最大值,如果...

POJ 1785 笛卡爾樹 RMQ

題意 給出一些節點,每個節點有兩個值,lable和priority,要求構成乙個笛卡爾樹,按lable是二叉排序樹,按priority是大根堆 不一定完全二叉樹 輸出括號表示。思路 沒什麼好說的,完全自己獨立寫的 除了讀入參考了rainy days的,其他都是獨立創造的 自我感覺寫的還可以 抑鬱,把...