陌上開花(CDQ分治)

2021-09-26 20:43:57 字數 1276 閱讀 7216

有n朵花,每朵花有三個屬性:花形(s)、顏色(c)、氣味(m),用三個整數表示。

現在要對每朵花評級,一朵花的級別是它擁有的美麗能超過的花的數量。

定義一朵花a比另一朵花b要美麗,當且僅sa>=sb,ca>=cb,ma>=mb。

顯然,兩朵花可能有同樣的屬性。需要統計出評出每個等級的花的數量。

input

第一行為n,k (1 <= n <= 100,000, 1 <= k <= 200,000 ), 分別表示花的數量和最大屬性值。

以下n行,每行三個整數si, ci, mi (1 <= si, ci, mi <= k),表示第i朵花的屬性

output

包含n行,分別表示評級為0...n-1的每級花的數量。

sample input

10 3

3 3 3

2 3 3

2 3 1

3 1 1

3 1 2

1 3 1

1 1 2

1 2 2

1 3 2

1 2 1

sample output

三維偏序模板題,一維排序,二維cdq分治,三維樹狀陣列,注意細節(哭了)

#include//#pragma gcc optimize(3)

using namespace std;

typedef long long ll;

const int n=1e5+5;

const int m=2e5+5;

struct node

else

} while(lwhile(rfor(int i=0;i}int main()

sort(q+1,q+1+n);

q[0].s=q[0].c=q[0].m=-1;

int tot=1;

for(int i=1;i<=n;i++)

q[tot]=q[i];

q[tot].num=1;

q[tot].id=tot;

tot++;

} cdq(1,tot);

for(int i=1;ifor(int i=0;ireturn 0;}/*

10 3

2 3 3

3 2 2

3 3 3

3 2 1

2 2 1

1 2 2

3 2 1

2 2 3

2 2 3

3 2 120

0511

0001

*/

陌上花開 CDQ分治

cdq分治 從來都沒有聽說過,寫了這題才知道還有這麼神奇的演算法。被逼無奈 w w 於是看了不少dalao的部落格,對cdq演算法粗淺地了解了一點。想要了解cdq的概念,可以看下這位dalao的部落格 所以,這道題要怎麼做呢。根據,cdq分治理論,這題按照題意建出來儲存資訊的陣列很明顯是個三維的。很...

BZOJ3262 陌上花開 CDQ分治

對第一關鍵字排序,分治每朵花,合併的時候通過歸併左右的花的第二關鍵字,將值插入樹狀陣列中求值。對於相同的花,先進行預處理即可。include bits stdc h define lowbit x x x using namespace std const int n 100005,m 200005...

bzoj 3262 陌上花開(cdq分治)

time limit 20 sec memory limit 256 mb submit 1431 solved 644 submit status discuss 有n朵花,每朵花有三個屬性 花形 s 顏色 c 氣味 m 又三個整數表示。現要對每朵花評級,一朵花的級別是它擁有的美麗能超過的花的數量...