首页 > 其他 > 详细

[BZOJ3262]:陌上花开(CDQ分治)

时间:2019-07-26 22:48:44      阅读:43      评论:0      收藏:0      [点我收藏+]

题目传送门


题目描述

有$n$朵花,每朵花有三个属性:花形$(s)$、颜色$(c)$、气味$(m)$,用三个整数表示。
现在要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量。
定义一朵花$A$比另一朵花$B$要美丽,当且仅$S_a\geqslant S_b,C_a\geqslant C_b,M_a\geqslant M_b$。
显然,两朵花可能有同样的属性。需要统计出评出每个等级的花的数量。


输入格式

第一行为$N,K$,分别表示花的数量和最大属性值。
以下$N$行,每行三个整数$s_i,c_i,m_i$,表示第$i$朵花的属性。


输出格式

包含$N$行,分别表示评级为$0...N-1$的每级花的数量。


样例

样例输入

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

样例输出

3
1
3
0
1
0
1
0
0
1


数据范围与提示

$1\leqslant N\leqslant 100,000$。

$1\leqslant K\leqslant 200,000$。

$1\leqslant s_i,c_i,m_i\leqslant K$。


题解

这道题好像可以用bitset,CDQ分治,K-Dtree解决。

bitset好像跑不过,我也不清楚……

最尴尬的是K-Dtree我不会……

那么我就来讲讲CDQ分治。

假设我们不考虑$m_i$,那么我们就变成了二元组排序,可以先将$s_i$排序,然后问题就转化成了:在一个数列里,找在$i$之前有几个数小于$c_i$。

很显然要使用树状数组维护即可在$\Theta (n\log n)$时间内求出答案。

那么现在又加了一维,怎么办呢?

首先,将这个三元组排序并去重,那么权值a已经随下标有序。

 

想睡觉觉了……

[BZOJ3262]:陌上花开(CDQ分治)

原文:https://www.cnblogs.com/wzc521/p/11253059.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!