【三维偏序】【分块】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\).定义一个元素的 ...
随机推荐
- 牛客多校对抗第6场 A Singing Contest
[20分]标题:A.Singing Contest | 时间限制:1秒 | 内存限制:256MJigglypuff is holding a singing contest. There are 2n ...
- ireport写sql语句的按钮在哪
- <video>标签的特性
以前的网页视频 过去还没有HTML5的时候,我们处理网页视频的时候,都是通过Flash插件来实现的,然而,并非所有浏览器都有同样的插件. 现在有了HTML5带来的video元素,开发者能够很方便地将视 ...
- The 2017 ACM-ICPC Asia East Continent League Final记录
首先感谢tyz学弟的麻麻-给我们弄到了名额- 然后就开始了ACM ECLFinal的玩耍,A*仙人掌可是立了flag要好好打的- 试机赛好像就全是GCJ kickstart的原题,然后AK了但是由于一 ...
- TCP(一)
TCP的特点:三次握手.四次挥手.可靠连接.丢包重传.所有的关键词都围绕着可靠传输. 实现可靠传输的核心机制:seq+ack.通过ack判断是否有丢包,是否需要重传. 三次握手 1)初始状态:clie ...
- 微信小程序登录状态
我们知道,WEB服务器通过浏览器携带的cookie获取session来判断是否是同一用户(或浏览器):Restful服务通过客户端传过来唯一ID,来识别调用用户. >为什么需要维护登录态? 有自 ...
- 生成器版本的文件MD5校验
生成器是一个可迭代的对象,可以对可迭代的对象进行便利,比如字符串.列表等,都是可迭代对象 def f(n): for i in range(n): yield i 特点: 1.当调用这个函数的 ...
- 转: Java安全停止线程方法
转: http://blog.csdn.net/flyingpig4/article/details/7675557 1.早期Java提供java.lang.Thread类型包含了一些列的方法star ...
- C++实现高斯滤波器
在matlab中,我们经常用到高斯滤波器,生成滤波器一般都是这样的函数psf = fspecial('gauss', GaussSize, sigma),但是在vs2010中用到的高斯滤波器不能自 ...
- java 定时器的三种方式
原地址:http://blog.csdn.net/haorengoodman/article/details/23281343/ /** * 普通thread * 这是最常见的,创建一个thread, ...