link
可以認為是k-d樹模板題。當然這只是不帶修改的k-d樹,帶修的以後寫了再說。
作為一篇學習筆記,先介紹一下什麼是k-d樹。要明白一點,即k是乙個變數,用來指代此資料結構處理和維護的空間維數,比如要維護平面上的點或者二元組集合那麼就應該叫做2-d樹(不然真的以為是kbd卡丹樹嗎,那樣叫實在有點**)。接下來說一下它的思想。它的本質就是對於乙個nk維空間進行分治維護,相當於改良優化後的k維樹狀陣列(當然它們有很多地方是不一樣的)。哪e2-d樹來說,它考慮的是把平面分割成乙個個矩形,每個節點對應乙個矩形,隨著樹的遞迴建造矩形被越分越小最後成為乙個單點。由於每個節點是乙個矩形,那麼就可以考慮把這個矩形當成乙個整體進行詢問和修改,具體方式看題。最後,如果帶插入的話可能會導致樹的結構失衡,此時就需要使用替罪羊一樣的方式進行拍扁重建,當然那都是後話了。
考慮到這道題,本質上它就是要詢問滿足\(ax+by的點\((x,y)\)的個數。很顯然前面的表示式相當於乙個半平面,而乙個矩形只有三種情況,全不在半平面中全在以及一部分在。前兩種情況可以直接看成乙個整體累加答案,後面那種情況遞迴處理就可以了。複雜度……應該是\(o(nlogn)\)吧,畢竟它有分治在裡面的嘛。
code:
#include#include//#define zczc
#define ll long long
using namespace std;
const int n=50010;
const int maxn=1e9;
inline void read(int &wh)
while(w<='9'&&w>='0')
wh*=f;return;
}inline int min(int s1,int s2)
ll ans;int aa,b,c;
inline bool in(int x,int y)
inline int inn(int wh)
void solve(int wh)
#undef lc
#undef rc
signed main()
int root=build(1,m,true);
for(int i=1;i<=n;i++)
return 0;
}
bzoj2850 巧克力王國
description 巧克力王國裡的巧克力都是由牛奶和可可做成的。但是並不是每一塊巧克力都受王國人民的歡迎,因為大家都不喜 歡過於甜的巧克力。對於每一塊巧克力,我們設x和y為其牛奶和可可的含量。由於每個人對於甜的程度都有自己的 評判標準,所以每個人都有兩個引數a和b,分別為他自己為牛奶和可可定義的...
Luogu4475 巧克力王國
luogu 平面上有 n 個點,每個點 x i,y i 價值為 w i m 次詢問,每次給出 a i,b i,c i 求滿足 a ix b iy的點的總價值。n,m le50000 正解貌似是 o n log n 我只會 kdt qaq 直接暴力就行了,每到乙個結點判斷是否可以直接返回 交集為空 全...
kd tree bzoj2850 巧克力王國
分四種情況討論 a,b 0 a,b 0 a 0,b 0 a 0,b 0 然後每次檢驗是否進入乙個矩形框 或者 是否直接利用這個矩形框的答案 僅僅利用兩個對角的座標進行更新即可。include include includeusing namespace std typedef long long l...