[CDQ分治] [树状数组] [BZOJ3262] 陌上花开
2017-03-18 22:00
218 查看
CDQ%%%
题目描述 Description
有n朵花,每朵花有三个属性:花形(s)、颜色(c)、气味(m),用三个整数表示。现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量。定义一朵花A比另一朵花B要美丽,当且仅当sa≥sb,ca≥cb,ma≥mb。显然,两朵花可能有同样的属性。需要统计出评出每个等级的花的数量。
输入 Input
第一行为N,K (1≤N≤105,1≤K≤2×105), 分别表示花的数量和最大属性值。
以下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
3
1
3
0
1
0
1
0
0
1
考虑CDQ分治,将所有属性都相同的花缩成一个,记录相同的个数。第一维可以排序搞定,三维的问题就变成了在二维平面上插入一点(ci,mi)问有多少点在它的左下方。
好了,我们可以用CDQ了。因为s已经是递增的了,下面处理c。
先递归左右两侧,现在左侧和右侧都是有序的,合并时,如果左侧的点出现在右侧点的左下方,就将它的影响插入树状数组,如果不是这样,说明右侧的点应该被加到左侧,答案加这个点的m的影响。
最后统计答案时将相同的次数加上作为最终答案统计。
时间O(nlog22n)但这并不严谨
实际上是T(n)=2T(n2)+nlog2k的一个东西……
数列求和玩好不送
Code
题目描述 Description
有n朵花,每朵花有三个属性:花形(s)、颜色(c)、气味(m),用三个整数表示。现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量。定义一朵花A比另一朵花B要美丽,当且仅当sa≥sb,ca≥cb,ma≥mb。显然,两朵花可能有同样的属性。需要统计出评出每个等级的花的数量。
输入 Input
第一行为N,K (1≤N≤105,1≤K≤2×105), 分别表示花的数量和最大属性值。
以下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
3
1
3
0
1
0
1
0
0
1
考虑CDQ分治,将所有属性都相同的花缩成一个,记录相同的个数。第一维可以排序搞定,三维的问题就变成了在二维平面上插入一点(ci,mi)问有多少点在它的左下方。
好了,我们可以用CDQ了。因为s已经是递增的了,下面处理c。
先递归左右两侧,现在左侧和右侧都是有序的,合并时,如果左侧的点出现在右侧点的左下方,就将它的影响插入树状数组,如果不是这样,说明右侧的点应该被加到左侧,答案加这个点的m的影响。
最后统计答案时将相同的次数加上作为最终答案统计。
时间O(nlog22n)但这并不严谨
实际上是T(n)=2T(n2)+nlog2k的一个东西……
数列求和玩好不送
Code
相关文章推荐
- bzoj 3262 陌上花开 - CDQ分治 - 树状数组
- Bzoj 3262: 陌上花开(CDQ分治)
- BZOJ 3262: 陌上花开 CDQ分治
- BZOJ 3262 陌上花开、HDU 5618 Jam's problem again(三维偏序、cdq分治 + BIT)
- bzoj 3262: 陌上花开 【cdq分治】
- 【CDQ分治】 BZOJ3262 陌上花开
- BZOJ 3262 陌上花开 (CDQ分治)
- BZOJ 3262 陌上花开 - CDQ分治
- cdq分治入门--BZOJ3262: 陌上花开
- BZOJ 3262: 陌上花开 [CDQ分治 三维偏序]
- bzoj 3262 陌上花开 【CDQ分治】
- BZOJ 3262 陌上花开(CDQ分治)
- 【BZOJ 3262】 3262: 陌上花开 (CDQ分治)
- BZOJ 3262 陌上花开 CDQ分治
- bzoj 3262: 陌上花开 (cdq分治)
- BZOJ 3262: 陌上花开 (CDQ分治)
- BZOJ 3262 陌上花开 树套树 (CDQ分治)
- bzoj 3262: 陌上花开(cdq分治)
- bzoj 3262: 陌上花开(cdq分治)
- [BZOJ3262]陌上花开(cdq分治+讲解+小结)