[BZOJ3262]:陌上花开(CDQ分治)
作者:互联网
题目描述
有$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,朵花,陌上,一朵花,geqslant,样例,CDQ,leqslant 来源: https://www.cnblogs.com/wzc521/p/11253059.html