链接:

https://www.luogu.org/problem/P3810#submit

题意:

一个元素三个属性, x, y, z, 给定求f(b) = {ax <= bx, ay <= by, az <= bz}, a的数量, 求0-(n-1)个数有多少个点满足

思路:

三维偏序, CDQ分治, 听说过, 一直想学, 先写板子题, 二维偏序就属性减到连个,搞一下.

CDQ的思想就是先对第一维排序, 左边的可以给有变贡献, 在分治下去, 同时对第二维排序, 将可用的点的第三维用数据结构维护一下, 挨个统计.

代码:

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2e5+10; struct Node
{
int x, y, z;
int cnt;
int ans;
}a[MAXN], b[MAXN]; int C[MAXN], Res[MAXN];
int n, k, cnt; bool CmpX(Node a, Node b)
{
if (a.x != b.x)
return a.x < b.x;
else if (a.y != b.y)
return a.y < b.y;
else
return a.z < b.z;
} bool CmpY(Node a, Node b)
{
if (a.y != b.y)
return a.y < b.y;
else
return a.z < b.z;
} int Lowbit(int x)
{
return x&(-x);
} void Update(int pos, int val)
{
while (pos <= k)
{
C[pos] += val;
pos += Lowbit(pos);
}
} int Query(int pos)
{
int ans = 0;
while (pos > 0)
{
ans += C[pos];
pos -= Lowbit(pos);
}
return ans;
} void CDQ(int l, int r)
{
if (l == r)//边界条件
return ;
int mid = (l+r)/2;
CDQ(l, mid);
CDQ(mid+1, r);
sort(a+l, a+mid+1, CmpY);
sort(a+mid+1, a+r+1, CmpY);
int i = l, j = mid+1;
while (j <= r)
{
while (i <= mid && a[j].y >= a[i].y)
Update(a[i].z, a[i].cnt), i++;
a[j].ans += Query(a[j].z);
j++;
}
for (int z = l;z < i;z++)
Update(a[z].z, -a[z].cnt);
} int main()
{
scanf("%d%d", &n, &k);
for (int i = 1;i <= n;i++)
scanf("%d%d%d", &b[i].x, &b[i].y, &b[i].z);
sort(b+1, b+1+n, CmpX);
a[1] = b[1];
a[1].cnt = 1;
cnt = 1;
for (int i = 2;i <= n;i++)
{
if (b[i].x != a[cnt].x || b[i].y != a[cnt].y || b[i].z != a[cnt].z)
a[++cnt] = b[i], a[cnt].cnt = 1;
else
a[cnt].cnt++;
}
CDQ(1, cnt);
for (int i = 1;i <= cnt;i++)
Res[a[i].ans+a[i].cnt-1] += a[i].cnt;
for (int i = 0;i < n;i++)
printf("%d\n", Res[i]); return 0;
}

洛谷P3810-陌上开花(三维偏序, CDQ, 树状数组)的更多相关文章

  1. BZOJ 2716/2648 SJY摆棋子 (三维偏序CDQ+树状数组)

    题目大意: 洛谷传送门 这明明是一道KD-Tree,CDQ分治是TLE的做法 化简式子,$|x1-x2|-|y1-y2|=(x1+y1)-(x2+y2)$ 而$CDQ$分治只能解决$x1 \leq x ...

  2. BZOJ 1176/2683 Mokia (三维偏序CDQ+树状数组)

    题目大意: 洛谷传送门 三维偏序裸题.. 每次操作都看成一个三元组$<x,y,t>$,表示$x,y$坐标和操作时间$t $ 询问操作拆成$4$个容斥 接下来就是$CDQ$了,外层按t排序, ...

  3. BZOJ 2141 排队 (三维偏序CDQ+树状数组)

    题目大意:略 洛谷传送门 和 [CQOI2015]动态逆序对 这道题一样的思路 一开始的序列视为$n$次插入操作 把每次交换操作看成四次操作,删除$x$,删除$y$,加入$x$,加入$y$ 把每次操作 ...

  4. BZOJ 3295 [CQOI2011]动态逆序对 (三维偏序CDQ+树状数组)

    题目大意: 题面传送门 还是一道三维偏序题 每次操作都可以看成这样一个三元组 $<x,w,t>$ ,操作的位置,权值,修改时间 一开始的序列看成n次插入操作 我们先求出不删除时的逆序对总数 ...

  5. BZOJ 3262 陌上花开 (三维偏序CDQ+树状数组)

    题目大意: 题面传送门 三维偏序裸题 首先,把三元组关于$a_{i}$排序 然后开始$CDQ$分治,回溯后按$b_{i}$排序 现在要处理左侧对右侧的影响了,显然现在左侧三元组的$a_{i}$都小于等 ...

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

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

  7. bzoj3262陌上花开 三维数点 cdq+树状数组

    大早上的做了一道三维数点一道五位数点,神清气爽! 先给一维排序,变成一个奇怪的动态的二维数点(相当于有一个扫描面扫过去,导致一系列的加点和询问) 然后cdq分治,再变回静态,考虑前半段对后半段的影响 ...

  8. 洛谷 P1908 逆序对 Label:归并排序||树状数组 不懂

    题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现在他们喜欢玩统计.最近,TOM老猫查阅到一个人类称之为“逆序对”的东西,这东西是这样定 ...

  9. 【洛谷P1972】HH的项链 离线+树状数组

    题目大意:静态查询序列区间颜色数. 题解:对于一个查询区间 [l , r] ,若有两个相同颜色的点在这个区间中,则总是取下标靠近端点 r 的颜色计入答案贡献.对于每个下标,记录下在这个下标之前,且距离 ...

随机推荐

  1. ./configure配置的参数 交叉编译 host,build target的含义

    交叉编译 host,build target的含义:build就是你正在使用的机器,host就是你编译好的程序可以运行的平台,target就是你编译的程序可以处理的平台.这个 build和host比较 ...

  2. vim 显示行号 查找的命令简单总结

    1. linux vim 进行查找的方法 在command 模式下面 输入 /what-you-search 就可以搜索 注意  n 是向下查找 N 是向上查找 不想搜索了 输入 :set nol 就 ...

  3. 【Python】【demo实验32】【回文数的确认】

    原题: 我的代码: #!/usr/bin/python # encoding=utf-8 # -*- coding: UTF-8 -*- #判断一个数字是否为回文数 即 12345654321 x = ...

  4. vue 简易学习

    好记性不如烂笔头 最近公司新出一个框架,采用的是前后端分离的开发方式,后端用的是springboot+mybatis(还有额外的zk.缓存.日志等待),前端采用的是vue+es6,由于以前对vue只知 ...

  5. Docker-PS命令解析

    查看 docker 容器,必然要用到 docker ps 命令.其基本格式为: docker ps [OPTIONS] 关键在于 OPTIONS(选项): 1 常见用法 1. 最常见的用法 $ doc ...

  6. 怎样使用 ssh 命令远程连接服务器?

    以 Git Bash 和 阿里云 ECS云服务器 为例, 想要进行远程连接, 可以使用 ssh 用户名@服务器IP 进行连接. 如下: 注意: 1. 密码输入时是没有提示的 2. root 是超级管理 ...

  7. Sublime Text3 插件收录

    收录常用的Sublime Text3 插件, 方便安装使用,免得每次一个个的搜, 欢迎补充 安装方法直接打开install package 搜索安装 1. Babel 支持react jsx语法 2. ...

  8. C#面向对象15 多态

    多态 概念:让一个对象能够表现出多种的状态(类型) 实现多态的3种手段:1.虚方法 2.抽象类 3.接口 1.虚方法 步骤:1.将父类的方法标记为虚方法,使用关键字 virtual,这个函数可以被子类 ...

  9. O052、Create Volume 操作 (Part III)

    参考https://www.cnblogs.com/CloudMan6/p/5617980.html       Jun 20 17:15:56 DevStack-Rocky-Compute-22 c ...

  10. vue导航栏制作

    1,在components新建commnn目录,然后再新建nav目录,在此目录下新建nav-bottom.vue文件和nav-item.vue文件 2,nav-bottom.vue中的内容: < ...