【三维偏序】【分块】bzoj3262 陌上花开
裸的三维偏序。 对x坐标排序,y、z坐标分块。复杂度O(n*sqrt(n*log(n)))。代码很短。
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
struct Point{int x,y,z,num;void Read(){scanf("%d%d%d",&x,&y,&z);}}p[];
bool operator < (const Point &a,const Point &b){return a.x<b.x;}
bool cmp (const Point &a,const Point &b){return a.y<b.y;}
vector<int>b[];
vector<Point>a[];
int n,rank[],m,head,maxv[],sum;
void makeblock()
{
int sz=(int)sqrt((double)n*(log((double)n)/log(2.0))); if(!sz) sz=;
for(sum=;sum*sz<n;sum++)
{
int R=sum*sz;
for(int i=(sum-)*sz+;i<=R;i++) p[i].num=sum;
maxv[sum]=p[R].y;
}
for(int i=(sum-)*sz+;i<=n;i++) p[i].num=sum;
maxv[sum]=p[n].y;
}
void insert(const Point &U)
{
b[U.num].insert(upper_bound(b[U.num].begin(),b[U.num].end(),U.z),U.z);
a[U.num].push_back(U);
}
int query(const Point &U)
{
int cnt=,i;
for(i=;i<=sum && maxv[i]<=U.y;++i)
cnt+=upper_bound(b[i].begin(),b[i].end(),U.z)-b[i].begin();
for(vector<Point>::iterator it=a[i].begin();it!=a[i].end();++it)
if((*it).z<=U.z&&(*it).y<=U.y) ++cnt;
return cnt;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) p[i].Read();
sort(p+,p+n+,cmp); makeblock();
sort(p+,p+n+);
for(int i=;i<=n;i++)
{
if(p[i].x!=p[i-].x) head=i;
if(p[i].x!=p[i+].x)
{
for(int j=head;j<=i;j++) insert(p[j]);
for(int j=head;j<=i;j++) ++rank[query(p[j])-];
}
}
for(int i=;i<n;i++) printf("%d\n",rank[i]);
return ;
}
【三维偏序】【分块】bzoj3262 陌上花开的更多相关文章
- BZOJ3262/洛谷P3810 陌上花开 分治 三维偏序 树状数组
原文链接http://www.cnblogs.com/zhouzhendong/p/8672131.html 题目传送门 - BZOJ3262 题目传送门 - 洛谷P3810 题意 有$n$个元素,第 ...
- BZOJ3262 陌上花开 —— 三维偏序 CDQ分治
题目链接:https://vjudge.net/problem/HYSBZ-3262 3262: 陌上花开 Time Limit: 20 Sec Memory Limit: 256 MBSubmit ...
- bzoj3262: 陌上花开 三维偏序cdq分治
三维偏序裸题,cdq分治时,左侧的x一定比右侧x小,然后分别按y排序,对于左侧元素按y大小把z依次插入到树状数组里,其中维护每个左侧元素对右侧元素的贡献,在bit查询即可 /************* ...
- BZOJ3262:陌上花开 & 洛谷3810:三维偏序——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=3262 https://www.luogu.org/problemnew/show/3810 Desc ...
- BZOJ3262陌上花开(三维偏序问题(CDQ分治+树状数组))+CDQ分治基本思想
emmmm我能怎么说呢 CDQ分治显然我没法写一篇完整的优秀的博客,因为我自己还不是很明白... 因为这玩意的思想实在是太短了: fateice如是说道: 如果说对于一道题目的离线操作,假设有n个操作 ...
- 洛谷P3810 陌上花开 CDQ分治(三维偏序)
好,这是一道三维偏序的模板题 当然没那么简单..... 首先谴责洛谷一下:可怜的陌上花开的题面被无情的消灭了: 这么好听的名字#(滑稽) 那么我们看了题面后就发现:这就是一个三维偏序.只不过ans不加 ...
- P3810 -三维偏序(陌上花开)cdq-分治
P3810 [模板]三维偏序(陌上花开) 思路 :按照 1维排序 二维 分治三维树状数组维护 #include<bits/stdc++.h> using namespace std; #d ...
- P3810 【模板】三维偏序(陌上花开)
P3810 [模板]三维偏序(陌上花开) cdq分治+树状数组 三维偏序模板题 前两维用cdq分治,第三维用树状数组进行维护 就像用树状数组搞逆序对那样做--->存权值的出现次数 attenti ...
- Luogu 3810 & BZOJ 3262 陌上花开/三维偏序 | CDQ分治
Luogu 3810 & BZOJ 3263 陌上花开/三维偏序 | CDQ分治 题面 \(n\)个元素,每个元素有三个值:\(a_i\), \(b_i\) 和 \(c_i\).定义一个元素的 ...
随机推荐
- [poj 3693]后缀数组+出现次数最多的重复子串
题目链接:http://poj.org/problem?id=3693 枚举长度L,看长度为L的子串最多能重复出现几次,首先,能出现1次是肯定的,然后看是否能出现两次及以上.由抽屉原理,这个子串出现次 ...
- D. Relatively Prime Graph
Let's call an undirected graph G=(V,E)G=(V,E) relatively prime if and only if for each edge (v,u)∈E( ...
- 在WPF中应用弱事件模式
http://www.cnblogs.com/rickiedu/archive/2007/03/15/676021.html 在wpf中应用弱事件模式 感谢VS 的Intellisens ...
- jw player学习笔记
一.是否支持IE7/8 本地离线播放不支持IE7/8,部署在服务器上时可以. 本地播放报错示意图 二.如何去Logo 1.网页版--HTML5---破解 桌面浏览器看到的效果: jwplayer(&q ...
- JAVA 成员访问权限修饰符
修饰符 类内部 package内 子类 其他 public 允许 允许 ...
- 【BZOJ2002】【HNOI2010】弹飞绵羊 [分块]
弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MB[Submit][Status][Discuss] Description 某天,Lostmonkey发明了一 ...
- mysql五-2:多表查询
一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 准备表 company.employeecompany.department #建表 create table department( id ...
- 用Golang自己构造ICMP数据包
ICMP是用来对网络状况进行反馈的协议,可以用来侦测网络状态或检测网路错误. 限于当前Golang在网络编程方面的代码稀缺,资料甚少,所以分享一个用Golang来构造ICMP数据包并发送ping程序的 ...
- AE特效-与MAYA的结合、制作音乐舞蹈太极动作
http://blog.sina.com.cn/s/blog_a439a2670101fbkk.html AE特效-与MAYA的结合.制作音乐舞蹈太极动作 (2013-07-24 14:44:12) ...
- Android USB Camera(1) : 调试记录【转】
转自:http://blog.csdn.net/eternity9255/article/details/53069037 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 前言 ...