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
直接暴力就行了,每到乙個結點判斷是否可以直接返回(交集為空),全部算上(完全包含與查詢範圍),算是剪枝吧。
#include#include#includeusing namespace std;
int gi()
#define ll long long
#define ls t[o].ch[0]
#define rs t[o].ch[1]
#define cmin(a,b) (a>b?a=b:a)
#define cmax(a,b) (a>1;
nth_element(a+l,a+o,a+r+1);
t[o].d[0]=t[o].min[0]=t[o].max[0]=a[o].d[0];
t[o].d[1]=t[o].min[1]=t[o].max[1]=a[o].d[1];
t[o].sum=a[o].key;
if (l=z) return 0;
if (1ll*t[o].min[0]*x+1ll*t[o].max[1]*y>=z) return 0;
if (1ll*t[o].max[0]*x+1ll*t[o].min[1]*y>=z) return 0;
if (1ll*t[o].max[0]*x+1ll*t[o].max[1]*y>=z) return 0;
return 1;
}inline bool in(int o,int x,int y,int z)
void query(int o,int x,int y,int z)
if (in(o,x,y,z)) ans+=a[o].key;
if (ls) query(ls,x,y,z);if (rs) query(rs,x,y,z);
}int main();
root=build(1,n,0);
while (m--)
return 0;
}
巧克力王國
link 可以認為是k d樹模板題。當然這只是不帶修改的k d樹,帶修的以後寫了再說。作為一篇學習筆記,先介紹一下什麼是k d樹。要明白一點,即k是乙個變數,用來指代此資料結構處理和維護的空間維數,比如要維護平面上的點或者二元組集合那麼就應該叫做2 d樹 不然真的以為是kbd卡丹樹嗎,那樣叫實在有點...
bzoj2850 巧克力王國
description 巧克力王國裡的巧克力都是由牛奶和可可做成的。但是並不是每一塊巧克力都受王國人民的歡迎,因為大家都不喜 歡過於甜的巧克力。對於每一塊巧克力,我們設x和y為其牛奶和可可的含量。由於每個人對於甜的程度都有自己的 評判標準,所以每個人都有兩個引數a和b,分別為他自己為牛奶和可可定義的...
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...