平衡樹板子
找出前驅後繼節點比較一下
#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的時間去查詢和維護,於是...