洛谷P3810 陌上花开(CDQ分治)
洛谷P3810 陌上花开
题解:
CDQ分治模板题。
一维排序,二维归并,三维树状数组。
核心思想是分治,即计算左边区间对右边区间的影响。
代码如下:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 200005;
int n, k, m;
struct node{
int x, y, z, id, w;
bool operator < (const node &A)const{
if(A.x == x && A.y == y) return z < A.z;
else if(A.x == x) return y < A.y;
return x < A.x;
}
}a[N], b[N], d[N];
int ans[N], c[N], cnt[N];
vector <int> v1, v2[N] ;
int lowbit(int x) {
return x& (-x);
}
void add(int x, int v) {
for(int i = x; i < N; i += lowbit(i)) c[i] += v;
}
int query(int x) {
int ans = 0;
for(int i = x; i; i -= lowbit(i)) ans += c[i];
return ans;
}
void cdq(int l, int r) {
if(l == r) return ;
int mid = (l + r) >> 1;
cdq(l, mid), cdq(mid + 1, r) ;
int t1 = l, t2 = mid + 1;
for(int i = l; i <= r; i++) {
if((t1 <= mid && a[t1].y <= a[t2].y) || t2 > r) {
add(a[t1].z, a[t1].w);
b[i] = a[t1++];
} else {
cnt[a[t2].id] += query(a[t2].z);
b[i] = a[t2++];
}
}
for(int i = l; i <= mid; i++) add(a[i].z, -a[i].w);
for(int i = l; i <= r; i++) a[i] = b[i];
}
int main() {
ios::sync_with_stdio(false); cin.tie(0);
cin >> n >> k;
for(int i = 1; i <= n; i++) {
cin >> a[i].x >> a[i].y >> a[i].z;
a[i].id = i;
}
sort(a + 1, a + n + 1);
int num = 1;
for(int i = 2; i <= n + 1; i++) {
if(a[i].x != a[i - 1].x || a[i].y != a[i - 1].y || a[i].z != a[i - 1].z) {
d[++m] = a[i - 1];
d[m].w = num;
num = 1;
v2[a[i - 1].id] = v1;
v1.clear();
} else {
num++;
v1.push_back(a[i - 1].id) ;
}
}
for(int i = 1; i <= m; i++) a[i] = d[i];
cdq(1, m);
for(int i = 1; i <= m; i++) {
int sz = v2[a[i].id].size();
for(auto v : v2[a[i].id]) cnt[v] += cnt[a[i].id] + sz;
cnt[a[i].id] += sz;
}
for(int i = 1; i <= n; i++) ans[cnt[i]]++;
for(int i = 0; i < n; i++) cout << ans[i] << '\n';
return 0;
}
/*
3 4
1 2 3
1 2 3
2 1 3
*/
洛谷P3810 陌上花开(CDQ分治)的更多相关文章
- 洛谷P3810 陌上花开 CDQ分治(三维偏序)
好,这是一道三维偏序的模板题 当然没那么简单..... 首先谴责洛谷一下:可怜的陌上花开的题面被无情的消灭了: 这么好听的名字#(滑稽) 那么我们看了题面后就发现:这就是一个三维偏序.只不过ans不加 ...
- BZOJ3262/洛谷P3810 陌上花开 分治 三维偏序 树状数组
原文链接http://www.cnblogs.com/zhouzhendong/p/8672131.html 题目传送门 - BZOJ3262 题目传送门 - 洛谷P3810 题意 有$n$个元素,第 ...
- P3810 陌上花开 CDQ分治
陌上花开 CDQ分治 传送门:https://www.luogu.org/problemnew/show/P3810 题意: \[ 有n 个元素,第 i 个元素有 a_i. b_i. c_i 三个属性 ...
- 洛谷P3810 陌上花开 (cdq)
最近才学了cdq,所以用cdq写的代码(这道题也是cdq的模板题) 这道题是个三维偏序问题,先对第一维排序,然后去掉重复的,然后cdq分治即可. 为什么要去掉重复的呢?因为相同的元素互相之间都能贡献, ...
- 洛谷P4390 Mokia CDQ分治
喜闻乐见的CDQ分治被我搞的又WA又T..... 大致思路是这样的:把询问用二维前缀和的思想拆成4个子询问.然后施CDQ大法即可. 我却灵光一闪:树状数组是可以求区间和的,那么我们只拆成两个子询问不就 ...
- 洛谷 P3810 【模板】三维偏序(陌上花开) (cdq分治模板)
在solve(L,R)中,需要先分治solve两个子区间,再计算左边区间修改对右边区间询问的贡献. 注意,计算额外的贡献时,两子区间各自内部的顺序变得不再重要(不管怎么样左边区间的都发生在右边之前), ...
- [bzoj] 3263 陌上花开 洛谷 P3810 三维偏序|| CDQ分治 && CDQ分治讲解
原题 定义一个点比另一个点大为当且仅当这个点的三个值分别大于等于另一个点的三个值.每比一个点大就为加一等级,求每个等级的点的数量. 显然的三维偏序问题,CDQ的板子题. CDQ分治: CDQ分治是一种 ...
- 【洛谷P3810】陌上花开
题目大意:给定一个三维空间点的坐标,求对于任意一个点三维均小于等于这个点的点个数. 题解:学会了简单的 cdq 分治. 首先,先将第一维从小到大排序,再用类似归并排序的操作对第二维进行排序,在第二维合 ...
- [洛谷P3810]【模板】三维偏序(陌上花开)
题目大意:有$n$个元素,第$i$个元素有三个属性$a_i,b_i,c_i$,设$f(i)=\sum\limits_{i\not = j}[a_j\leqslant a_i,b_j\leqslant ...
随机推荐
- 【Gamma】PhyLab 测试报告
PhyLab Gamma测试报告 测试中发现的bug Gamma阶段新Bug Bug 可能原因 部分错误码设置与原先抛异常的逻辑冲突 原先代码中使用了一些特殊的办法处理异常 Beta未发现Bug Bu ...
- Python 2 代码转 Python 3的一些转化
Python 2 代码转 Python 3的一些转化 1.“print X” 更改为“print(X)” 2.xrange改为range 3.m.itervalues() 改为 m.values() ...
- 使用 Jest 和 Supertest 进行接口端点测试
如何创建测试是一件困难的事.网络上有许多关于测试的文章,却从来不告诉你他们是如何开始创建测试的. 所以,今天我将分享我在实际工作中是如何从头开始创建测试的.希望能够对你提供一些灵感. 目录: 使用 E ...
- c# 数据请求方式提供
营销平台数据请求介绍 项目介绍: 前端使用 WPF,采用MVVM模式 后端数据库采用的sqlite 依靠本地化运行 后期可能会采用WebApi 因为WPF都是自学的 所以 代码方面写的可能不 ...
- 第一周第二部分 coursera.org
即使J(,)=,也不能是完美估计,因为其他数据可能存在误差 取任何颜色并沿着“圆”走,就可以得到相同的成本函数值,右图三个点的J(,)相同 越靠近圆心,J(,)越小 梯度下降算法可以将代价函数J()最 ...
- AntDesign vue学习笔记(九)自定义文件上传
第七节时提到,上传文件时实际可能需要传输一个token. 1.查看vue antdesign文档https://vue.ant.design/components/upload-cn/ 2.使用cus ...
- 不能随便用get和set
有些对象呢,保存一半.如果你只提供get和set,那么备份不了数据. previousState的get和set还是最新的 wtforms InputRequired: DataRequired: i ...
- 命令(Command)模式
命令模式又称为行动(Action)模式或者交易(Transaction)模式. 命令模式把一个请求或者操作封装到一个对象中.命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可 ...
- Sitecore 内容版本设计
Sitecore内容变化的跟踪显着偏离既定规范.了解Sitecore中版本控制和工作流程的细节,该产品是对这些发布工具的回答. 在出版界,实时跟踪内容变化很常见,可能是由于Microsoft Word ...
- Python开发【第十二篇】python作用域和global nonlocal
python的作用域 作用域也叫名字空间,是访问变量时查找变量名的范围空间 python中的四个作用域 LEGB 作用域 英文解释 英文缩写 局部作用域 Local(function) L 外部嵌套函 ...