bzoj3262 陌上花開

2022-04-30 05:24:09 字數 1181 閱讀 1297

一道三維偏序的裸題,其實還是很好想的。(像我一樣的萌新先戳-->二維偏序

這次來的是三維了,那麼怎麼辦?二維偏序既可以用cdq分治,又可以用樹狀陣列,那三維偏序,不就一維排序,一維歸併,一維樹狀陣列不就行了?

那麼就用樹狀陣列替代之前的sum,因為之前sum就是直接累加了,那用樹狀陣列相當於再加了一層篩選。

ps:打cmp的時候,假如不喜歡用a[i].x

#include#include

#include

#include

#include

#include

using

namespace

std;

struct

flower

a[110000];int

n,len;

void ins(int x,int y,int

z)bool

cmp(flower n1,flower n2)

void

sc()

//------------sc 第一維排序完成。--------------------

int m,s[210000

];int lowbit(int x)

void add(int x,intk)}

int getsum(int

x)

return

ans;}//

-----------樹狀陣列解決第三維--------------

flower t[

110000

];void cdq(int l,int r)//

歸併解決第二維,順便呼叫樹狀陣列

while(i<=mid)add(a[i].z,a[i].tot), t[p++]=a[i++];

while(j<=r)a[j].f+=getsum(a[j].z), t[p++]=a[j++];

for(int i=l;i<=mid;i++)add(a[i].z,-a[i].tot);//

清空樹狀陣列,這個如果打memset,每重for都乙個o(n)會掛

for(int i=l;i<=r;i++)a[i]=t[i];}//

-------cdq--------------

int ans[110000

];int

main()

BZOJ3262 陌上花開

description 有n朵花,每朵花有三個屬性 花形 s 顏色 c 氣味 m 又三個整數表示。現要對每朵花評級,一朵花的級別是它擁有的美麗能超過的花的數量。定義一朵花a比另一朵花b要美麗,當且僅當sa sb,ca cb,ma mb。顯然,兩朵花可能有同樣的屬性。需要統計出評出每個等級的花的數量。...

BZOJ3262 陌上花開

description 有n朵花,每朵花有三個屬性 花形 s 顏色 c 氣味 m 又三個整數表示。現要對每朵花評級,一朵花的級別是它擁有的美麗能超過的花的數量。定義一朵花a比另一朵花b要美麗,當且僅當sa sb,ca cb,ma mb。顯然,兩朵花可能有同樣的屬性。需要統計出評出每個等級的花的數量。...

BZOJ 3262 陌上花開

話說這是一道許可權題,如果我複製過來,bzoj不會打死我吧?hhh 大意就是給三維空間中的很多點,乙個點p x,y,z 的級別定義為x0 x y0 y z0 z的任意點p0 x0,y0,z0 的數量,求每種級別的點各有多少種。看過一道二維的這樣的題目,當時想的是直接排序然後用bit 樹狀陣列 秒掉,...