裸的三维偏序。 对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 陌上花开的更多相关文章

  1. BZOJ3262/洛谷P3810 陌上花开 分治 三维偏序 树状数组

    原文链接http://www.cnblogs.com/zhouzhendong/p/8672131.html 题目传送门 - BZOJ3262 题目传送门 - 洛谷P3810 题意 有$n$个元素,第 ...

  2. BZOJ3262 陌上花开 —— 三维偏序 CDQ分治

    题目链接:https://vjudge.net/problem/HYSBZ-3262 3262: 陌上花开 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit ...

  3. bzoj3262: 陌上花开 三维偏序cdq分治

    三维偏序裸题,cdq分治时,左侧的x一定比右侧x小,然后分别按y排序,对于左侧元素按y大小把z依次插入到树状数组里,其中维护每个左侧元素对右侧元素的贡献,在bit查询即可 /************* ...

  4. BZOJ3262:陌上花开 & 洛谷3810:三维偏序——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=3262 https://www.luogu.org/problemnew/show/3810 Desc ...

  5. BZOJ3262陌上花开(三维偏序问题(CDQ分治+树状数组))+CDQ分治基本思想

    emmmm我能怎么说呢 CDQ分治显然我没法写一篇完整的优秀的博客,因为我自己还不是很明白... 因为这玩意的思想实在是太短了: fateice如是说道: 如果说对于一道题目的离线操作,假设有n个操作 ...

  6. 洛谷P3810 陌上花开 CDQ分治(三维偏序)

    好,这是一道三维偏序的模板题 当然没那么简单..... 首先谴责洛谷一下:可怜的陌上花开的题面被无情的消灭了: 这么好听的名字#(滑稽) 那么我们看了题面后就发现:这就是一个三维偏序.只不过ans不加 ...

  7. P3810 -三维偏序(陌上花开)cdq-分治

    P3810 [模板]三维偏序(陌上花开) 思路 :按照 1维排序 二维 分治三维树状数组维护 #include<bits/stdc++.h> using namespace std; #d ...

  8. P3810 【模板】三维偏序(陌上花开)

    P3810 [模板]三维偏序(陌上花开) cdq分治+树状数组 三维偏序模板题 前两维用cdq分治,第三维用树状数组进行维护 就像用树状数组搞逆序对那样做--->存权值的出现次数 attenti ...

  9. Luogu 3810 & BZOJ 3262 陌上花开/三维偏序 | CDQ分治

    Luogu 3810 & BZOJ 3263 陌上花开/三维偏序 | CDQ分治 题面 \(n\)个元素,每个元素有三个值:\(a_i\), \(b_i\) 和 \(c_i\).定义一个元素的 ...

随机推荐

  1. 版本7以上IE以文件夹视图方式打开FTP的解决

    一.问题的提出 版本7以上IE浏览器打开FTP时只出现列表 二.问题的解决 设置ie浏览器选项即可,以ie9为例,设置步骤如下: 1.启动ie,点击设置按钮,弹出菜单选择internet选项命令: 2 ...

  2. 使用eclipse插件创建一个web project

    使用eclipse插件创建一个web project 首先创建一个Maven的Project如下图 我们勾选上Create a simple project (不使用骨架) 这里的Packing 选择 ...

  3. 【转载】How long is “too long” for MySQL Connections to sleep?

    From:http://dba.stackexchange.com/questions/1558/how-long-is-too-long-for-mysql-connections-to-sleep ...

  4. Python爬虫学习笔记之爬取新浪微博

    import requests from urllib.parse import urlencode from pyquery import PyQuery as pq from pymongo im ...

  5. Redis(1) 初识Redis

    redis介绍: Redis是一个开源(BSD许可)的内存数据结构存储,用作数据库,缓存和消息代理.它支持数据结构,如字符串(String),哈希(Hash),列表(List),集合(Set),具有范 ...

  6. babel-preset-es2015,babel-polyfill 与 babel-plugin-transform-runtime

    babel-preset-es2015 是一个babel的插件,用于将部分ES6 语法转换为ES5 语法.转换的语法包括: 箭头函数 var a1 = () => 1 编译为 var a1 = ...

  7. 慕课网javascript 进阶篇 第九章 编程练习

    把平常撸的码来博客上再撸一遍既可以加深理解,又可以理清思维.还是很纯很纯的小白,各位看官老爷们,不要嫌弃.最近都是晚睡,昨晚也不例外,两点多睡的.故,八点起来的人不是很舒服,脑袋有点晕呼呼,鉴于昨晚看 ...

  8. 我们用CloudStack做什么

    原文地址:http://www.sdfengxi.com/?p=376 我想很多同学会有类似的疑问,就是我配置好了CloudStack或者OpenStack之类的环境之后能够提供什么服务或者应用呢?下 ...

  9. HDU4889 Scary Path Finding Algorithm

    Fackyyj loves the challenge phase in TwosigmaCrap(TC). One day, he meet a task asking him to find sh ...

  10. Runtime类 调用windows程序。

    import java.io.*; public class webcyz { /** * @param args */ public static void main(String[] args) ...