bzoj3262陌上花开 cdq分治
3262: 陌上花开
Time Limit: 20 Sec Memory Limit: 256 MB
Submit: 2794 Solved: 1250
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
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
1
3
0
1
0
1
0
0
1
HINT
1 <= N <= 100,000, 1 <= K <= 200,000
Source
三维偏序 -最裸的cdq分治
首先把所有元素按照x排序,然后进行cdq分治
在分治时,总是由分治左区间向右区间转移答案,可以保证转移的x满足条件
按照y排序再转移,保证y有序
树状数组维护z,保证z有序
由于分治是层层递归下去的,所以每个点一定都会计算完它的前缀贡献的答案
另外,cdq分治的核心思想是:先处理左区间,再处理左区间对右区间贡献的答案,最后处理右区间
但对于这个题,可以先左再右,最后左向右贡献答案
#include<bits/stdc++.h>
#define N 100005
using namespace std;
int n,m,pa,pb,acnt,bcnt,tot,cnt[N],pos[N],c[N<<];
struct info{int x,y,z,id,ans;}q[N],a[N],b[N];
bool cmp1(info a,info b){
if(a.x==b.x){
if(a.y==b.y)return a.z<b.z;
return a.y<b.y;
}
return a.x<b.x;
}
bool cmp2(info a,info b){return a.y<b.y;}
void add(int p,int v){
while(p<=m){
c[p]+=v;
p+=p&-p;
}
}
int query(int p){
int ret=;
while(p){
ret+=c[p];
p-=p&-p;
}
return ret;
}
void cdq(int l,int r){
if(l>=r)return;
int mid=(l+r)>>;
cdq(l,mid);
acnt=bcnt=;
for(int i=l;i<=mid;++i)a[++acnt]=q[i];
for(int i=mid+;i<=r;++i)b[++bcnt]=q[i];
sort(a+,a++acnt,cmp2);
sort(b+,b++bcnt,cmp2);
pa=pb=;tot=;
while(pb<=bcnt){
while(pa<=acnt&&a[pa].y<=b[pb].y){
add(a[pa].z,);
pos[++tot]=a[pa].z;
++pa;
}
q[b[pb].id].ans+=query(b[pb].z);
++pb;
}
for(int i=;i<=tot;++i)add(pos[i],-);
cdq(mid+,r);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)
scanf("%d%d%d",&q[i].x,&q[i].y,&q[i].z);
sort(q+,q++n,cmp1);
for(int i=;i<=n;++i)q[i].id=i;
cdq(,n);
for(int i=n;i;--i)
if(q[i].x==q[i+].x&&q[i].y==q[i+].y&&q[i].z==q[i+].z)
q[i].ans=max(q[i].ans,q[i+].ans);
for(int i=;i<=n;++i)++cnt[q[i].ans];
for(int i=;i<n;++i)printf("%d\n",cnt[i]);
return ;
}
bzoj3262陌上花开 cdq分治的更多相关文章
- bzoj3262陌上花开 cdq分治入门题
Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当 ...
- bzoj3262: 陌上花开(cdq分治+树状数组)
3262: 陌上花开 题目:传送门 题解: %%%cdq分治 很强大的一个暴力...感觉比分块高级多了 这道题目就是一个十分经典的三维偏序的例题: 一维直接暴力排序x 二维用csq维护y 三维用树状数 ...
- bzoj3262 陌上花开 cdq分治(入门)
题目传送门 思路:cdq分治处理偏序关系的模板题,主要就是学cdq分治吧,还在入门中. 代码其实也很好理解,记得树状数组操作的上限是 z的最大值,不是n的最大值,这个细节wa了好久. #include ...
- bzoj3262 陌上花开——CDQ分治
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3262 第一道CDQ分治题! 看博客:https://www.cnblogs.com/Narh ...
- 【学术篇】bzoj3262 陌上花开. cdq分治入门
花儿们已经很累了-- 无论是花形.颜色.还是气味, 都不是为了给人们摆出来欣赏的, 更不是为了当做出题的素材的, 她们并不想自己这些属性被没有生命的数字量化, 并不想和其它的花攀比, 并无意分出个三六 ...
- BZOJ3262:陌上花开(CDQ分治)
Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),用三个整数表示. 现在要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量. 定义一朵花A比另一朵花B要美 ...
- [Bzoj3262]陌上花开(CDQ分治&&树状数组||树套树)
题目链接 题目就是赤裸裸的三维偏序,所以用CDQ+树状数组可以比较轻松的解决,但是还是树套树好想QAQ CDQ+树状数组 #include<bits/stdc++.h> using nam ...
- P3810 陌上花开 CDQ分治
陌上花开 CDQ分治 传送门:https://www.luogu.org/problemnew/show/P3810 题意: \[ 有n 个元素,第 i 个元素有 a_i. b_i. c_i 三个属性 ...
- 【BZOJ3262】陌上花开 cdq分治
[BZOJ3262]陌上花开 Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义 ...
随机推荐
- 《招一个靠谱的移动开发》iOS面试题及详解(下篇)
iOS面试知识点 现在进入本篇的正题.本篇的面试题是我认为比较好的iOS开发基础知识点,希望大家看过这后在理解的基础上掌握而不是死记硬背.死记硬背很快也会忘记的. 1 iOS基础 1.1 父类实现深拷 ...
- Struts2之Struts2的下载与安装
Struts2的下载 登陆struts的官网 下载Full Distribution这个选项的struts2的包. 这是Struts2的完整版,里面包括Struts2的实例应用,空实例应用,核心库,源 ...
- JAVA_SE基础——62.String类的构造方法
下面我先列出初学者目前用到的构造方法 String 的构造方法: String() 创建一个空内容 的字符串对象. String(byte[] bytes) 使用一个字节数组构建一个字 ...
- JAVA_SE基础——8.基本数据类型
基本数据类型有:整数类型.浮点类型.字符类型.布尔类型 整数类型 整数类型用来存储整数数值,即没有小数部分的数值.与C.C++语言相同,整数在Java语言中有3种表示形式:十进制.八进制和十六进制. ...
- 求解数独难题, Sudoku问题(回溯)
Introduction : 标准的数独游戏是在一个 9 X 9 的棋盘上填写 1 – 9 这 9 个数字,规则是这样的: 棋盘分成上图所示的 9 个区域(不同颜色做背景标出,每个区域是 3 X 3 ...
- JavaScript 原型中的哲学思想
学习JavaScript过程中,原型问题一直让我疑惑许久,那时候捧着那本著名的红皮书,看到有关原型的讲解时,总是心存疑虑.当在JavaScript世界中走过不少旅程之后,再次萌发起研究这部分知识的欲望 ...
- Java设计模式(七)Decorate装饰器模式
一.场景描述 (一)问题 系统中最初使用Crystal Report(水晶报表)工具生成报表,并将报表发送给客户端查看,此时定义一CrystalReport工具类即可完成水晶报表的生成工作. 后续报表 ...
- C++中const对象和非const对象调用成员函数问题
一.类MyClass 二.主函数调用 三.结果
- 论文泛读·Adversarial Learning for Neural Dialogue Generation
原文翻译 导读 这篇文章的主要工作在于应用了对抗训练(adversarial training)的思路来解决开放式对话生成(open-domain dialogue generation)这样一个无监 ...
- Mysql变量列表
变量表解释 (https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html)