【三维偏序】【分块】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\).定义一个元素的 ...
随机推荐
- [模拟赛] StopAllSounds
Description 小松鼠开心地在树之间跳跃着,突然她停了下来.因为眼前出现了一个 拿着专克超萌小松鼠的法宝----超萌游戏机的游客! 超萌游戏机之所以拥有这个名字,是因为它的屏幕是一个n × 2 ...
- maven 压缩、合并 js, css
转载自:http://blog.csdn.net/fangxing80/article/details/17639607 我们知道在 Web 应用开发中为了提高客户端响应速度,需要将页面使用的资源最小 ...
- MyBatis+Spring实现基本CRUD操作
一.MyBaits介绍 MyBatis 是一个可以自定义SQL.存储过程和高级映射的持久层框架.MyBatis 摒除了大部分的JDBC代码.手工设置参数和结果集重获.MyBatis 只使用简单的X ...
- vivo面试学习3(git和svn的区别)
git和svn有什么区别? svn: 系统特点: 1).集中式版本控制系统(存在一个中央版本库,所有开发人员所使用的代码都是来源于版本库,提交代码也是这个中央版本库) 2).企业内部并行集中开发 3) ...
- 【poj3734】矩阵乘法
题解: 若当前有i个格子.2个是偶数的方案数为a[i]1个是偶数的方案数为b[i]0个是偶数的方案数为c[i] a[i+1]=2*a[i](i+1染成黄或蓝)+b[i](把奇数变为偶数)b[i+1]= ...
- 【Foreign】最大割 [线性基]
最大割 Time Limit: 15 Sec Memory Limit: 256 MB Description Input Output Sample Input 3 6 1 2 1 1 2 1 3 ...
- 关于dlib人脸对比,人脸识别
人脸检测 人脸特征点提取 人脸对比,等于两张人脸对比,识别 封装的所有识别函数,直接看下面调用就好了. # coding:utf-8 ''' 本本次封装,我主要是做两张人脸对比. 就只人脸识别部分,简 ...
- SuSE Linux修改网卡配置
http://blog.chinaunix.net/uid-20765159-id-1850854.html SuSE Linux修改网卡配置 2010 SuSE linux ...
- 别再滥用scrapy CrawlSpider中的follow=True
对于刚接触scrapy的同学来说, crawlspider中的rule是比较难理解的, 很可能驾驭不住. 而且笔者在YouTube中看到许多公开的演讲都都错用了follow这一选项, 所以今天就来仔细 ...
- ubuntu16.04下fcitx无法在QT Creator输入中文解决办法
我的博客新地址:www.liuquanhao.com ------------------------------------------------------ Qt creator无法用fcitx ...