bzoj 3262 陌上花开
本质是一个三维偏序,一位排序后cdq分治,一维在子函数里排序,一维用树状数组维护。
把三维相等的合并到一个里面。
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 #define N 100005 6 using namespace std; 7 int n,k,m; 8 struct node 9 { 10 int x,y,z,num,op; 11 int yuan; 12 bool operator == (const node &b) 13 { 14 return x==b.x&&y==b.y&&z==b.z; 15 } 16 }a[N],b[N]; 17 int shan[N]; 18 int ans[N]; 19 bool cmp1(node aa,node bb) 20 { 21 if(aa.num==0)return 0; 22 if(bb.num==0)return 1; 23 if(aa.x!=bb.x)return aa.x<bb.x; 24 if(aa.y!=bb.y)return aa.y<bb.y; 25 if(aa.z!=bb.z)return aa.z<bb.z; 26 27 } 28 bool cmp2(node aa,node bb) 29 { 30 if(aa.y!=bb.y)return aa.y<bb.y; 31 return aa.op<bb.op; 32 } 33 int c[200005]; 34 void add(int x,int y) 35 { 36 for(int i=x;i<=k;i+=(i&(-i)))c[i]+=y; 37 } 38 int qur(int x) 39 { 40 int now=0; 41 for(int i=x;i;i-=(i&(-i)))now+=c[i]; 42 return now; 43 } 44 void solve(int l,int r) 45 { 46 if(l==r)return ; 47 int mid=(l+r)>>1; 48 solve(l,mid);solve(mid+1,r); 49 int cnt=0; 50 for(int i=l;i<=mid;i++) 51 { 52 b[++cnt]=a[i]; 53 b[cnt].op=1; 54 } 55 for(int i=mid+1;i<=r;i++) 56 { 57 b[++cnt]=a[i]; 58 b[cnt].op=2; 59 } 60 sort(b+1,b+cnt+1,cmp2); 61 for(int i=1;i<=cnt;i++) 62 { 63 if(b[i].op==1)add(b[i].z,b[i].num); 64 else ans[b[i].yuan]+=qur(b[i].z); 65 } 66 for(int i=1;i<=cnt;i++)if(b[i].op==1)add(b[i].z,-b[i].num); 67 } 68 int zui[N]; 69 int main() 70 { 71 scanf("%d%d",&n,&k);m=n; 72 for(int i=1;i<=n;i++) 73 { 74 scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z); 75 a[i].num=1; 76 } 77 sort(a+1,a+n+1,cmp1); 78 for(int i=1;i<=n;i++) 79 { 80 if(a[i]==a[i-1]) 81 { 82 a[shan[i-1]].num++; 83 shan[i]=shan[i-1]; 84 a[i].num--; 85 } 86 else shan[i]=i; 87 } 88 sort(a+1,a+n+1,cmp1); 89 while(a[n].num==0)n--; 90 for(int i=1;i<=n;i++)a[i].yuan=i; 91 solve(1,n); 92 for(int i=1;i<=n;i++)zui[ans[a[i].yuan]+a[i].num-1]+=a[i].num; 93 for(int i=0;i<=m-1;i++)printf("%d\n",zui[i]); 94 return 0; 95 }
转载于:https://www.cnblogs.com/ezyzy/p/6155519.html
bzoj 3262 陌上花开相关推荐
- bzoj 3262: 陌上花开(cdq分治)
3262: 陌上花开 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 2433 Solved: 1087 [Submit][Status][Disc ...
- BZOJ 3262 陌上花开
3262: 陌上花开 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 2590 Solved: 1159 [Submit][Status][Disc ...
- BZOJ - 3262 陌上花开
3262: 陌上花开 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 5433 Solved: 2623 [Submit][Status][Disc ...
- bzoj 3262: 陌上花开
3262: 陌上花开 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 5800 Solved: 2804 [Submit][Status][Discus ...
- 3262: 陌上花开
3262: 陌上花开 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 1423 Solved: 640 [ Submit][ Status][ ...
- BZOJ 3262 cdq分治 OR 树套树
注意判断 三个条件都一样的-- (CDQ分治 其实并不是很难理解 只是想不到--) CDQ分治: //By SiriusRen #include <cstdio> #include < ...
- [cdq分治][树状数组] Bzoj P3262 陌上花开
Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),用三个整数表示. 现在要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量. 定义一朵花A比另一朵花B要美 ...
- 一句话题解(20170801~20170125)
8.1 bzoj 4720 noip2016 换教室 floyd预处理+期望(薛定谔的猫) bzoj 4318 OSU! 三次函数期望值 从一次.二次推得 8.2 bzoj 1076 状压+期望DP ...
- 分治、CDQ分治小结
分治.CDQ分治小结 A Summary for Divide and Conquer 0. Anouncement 本文部分图片以及部分内容来自互联网,内容过多就不一一注明出处了,冒犯之处还请海涵. ...
最新文章
- jenkins获取远程服务器文件,Jenkins用SSH传输文件到远程服务器
- html5 的a标签是可以拨电话的,通过其Href属性来实现
- java使用Calendar类获取常用简单工具类
- ubuntu 如何在任意终端不填加./就可以执行文件类似ls cd cp
- vue.config.js 配置参考
- 浮动的三个特点很重要。
- 逆向某某单车-iOS客户端
- JavaScript中函数的使用(源码解析)
- 借助mapshaper的简化来修复geojson的拓扑错误
- js原生 在线客服功能
- 3dmax:3dmax三维VR渲染设置之摄像机设置(修改摄像机、创建摄像机及其基本参数{视野、正交投影、镜头、环境范围、剪切平面、多过程效果、运动模糊、景深参数、运动模糊参}解释等)图文教程之详细攻略
- 【蓝桥杯】第十三届蓝桥杯省赛 AK 攻略 —— C++ B组全真题超详细剖析
- PMP|项目管理过程中,怎么识别风险?
- 电子邮件服务的配置和使用
- Spring 使用 ref 和 depends-on 属性的使用
- 关键链方法的多项目监控技术
- python库和语言手册_pytorch 中文手册
- 【Pr剪辑】Pr下载链接,基础操作,渲染1080视频,视频导出,音频导出,视频变速和合并
- 邹秋实:考古的魅力在于发掘之前你不知道下面会有什么
- PostgreSQL 认证方式详解
热门文章
- WindowType 属性
- 终端bash美化(FC)
- 密码学是如何保护区块链的
- 大学毕业没有实习经历_我是如何在大学毕业后没有实习的情况下获得第一份开发人员工作的...
- 利用kickstart自动安装虚拟机
- php hasattribute,PHP DOMElement hasAttribute()用法及代码示例
- 放大 旋转 css3,CSS3详解:transform 的旋转、旋转放大、放大、移动
- JavaScript面向对象怎样删除标签页?
- C#Hello World
- Bitmap上下合成图片