hdu4585 平衡樹解法

2021-09-24 23:25:28 字數 1300 閱讀 4926

平衡樹板子

找出前驅後繼節點比較一下

#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

#define ll long long

const int ding=1e5+5;

struct treapa[ding];

int n,root,tot=0;

const int inf=0x3f3f3f3f;

int new(int id,int val)

void update(int p)

int getrankbyval(int p,int val)

if(val==a[p].val)return a[a[p].l].size+1;

if(val=rank)return getvalbyrank(a[p].l,rank);

//如果恰好大於等於,說明就是這個點

if(a[a[p].l].size+a[p].cnt>=rank)return a[p].val;

//否則就在右子樹裡面,要判斷右子樹有沒有這麼多節點,所以是rank-a[a[p].l].size-a[p].cnt;

return getvalbyrank(a[p].r,rank-a[a[p].l].size-a[p].cnt);

}void zig(int &p)

void zag(int &p)

int getpre(int val)

break;

}if(a[p].vala[ans].val)ans=p;

p=val0)

break;

}if(a[p].val>val&&a[p].val1)

if(a[p].l||a[p].r)

else

update(p);

}else p=0;

return;

}valupdate(p);

}void insert(int &p,int id,int val)

//樹中已經有了該節點

if(val==a[p].val)

//插入左子樹

if(val//插入右子樹

else

update(p);

}void build()

int main()

else

insert(root,id,val);}}

return 0;

}

HDU4585 樹狀陣列 STL

題意 有n 1個僧侶,然後1號已經在塔里了,能力值是1e9,現在依次給你兩個數,第乙個代表標號,第二個代表能力值,每次挑乙個在塔里的能力最接近的跟她打,如果能力相同的取小,然後把它扔進塔里 每次輸出兩個標號,乙個舊的,乙個新的。思路 當時就感覺很水,所以做著做著就 變成了,離散化能力值,然後利用樹狀...

HDU 4585 感受一下 set 的用法

這是第一次參加邀請賽的時候遇到的題目啊。當時全場過啊。自己就是不會啊。當時我還記得自己手寫一二叉堆。淚奔。這就是一平衡樹的題目,找前繼和後繼的。set足夠了。在 set 的 it 的時候要注意是不是是開頭 include include include include include include...

HDU4585 Shaolin Map容器簡單應用

題目大意 說少林寺乙個乙個來 每次來乙個要找乙個實力最相近的人和他打一場,輸出每次比賽的人,先輸出新來的,後輸出功力最相近的,如果有兩個人一樣相近,就取功力比較低的那位 so sweeeeeet 思路 其實就是乙個排序查詢 插入維護的問題,但是資料比較大,一看就知道要用log的時間去查詢和維護,於是...