Luogu4475 巧克力王國

2022-04-28 20:36:09 字數 1157 閱讀 5171

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...