【CDQ分治】【模板】三维偏序(陌上花开)
P3810 【模板】三维偏序(陌上花开) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
template<typename T>
struct BIT {
#ifndef lowbit
#define lowbit(x) (x & (-x));
#endif
int n;
vector<T> t;
BIT () {}
BIT (int _n): n(_n) { t.resize(_n + 1); }
BIT (int _n, vector<T>& a): n(_n) {
t.resize(_n + 1);
for (int i = 1; i <= n; ++ i) {
t[i] += a[i];
int j = i + lowbit(i);
if (j <= n) t[j] += t[i];
}
}
//单点修改
void update(int i, T x) {
while (i <= n) {
t[i] += x;
i += lowbit(i);
}
}
//区间查询
T sum(int i) {
T ans = 0;
while (i > 0) {
ans += t[i];
i -= lowbit(i);
}
return ans;
}
T query(int i, int j) {
return sum(j) - sum(i - 1);
}
//区间修改则存入差分数组,[l, r] + k则update(x,k),update(y+1,-k)
//单点查询则直接求前缀和sum(x)
//求逆序对
/*
iota(d.begin(), d.end(), 0);
stable_sort(d.begin(), d.end(), [&](int x, int y) {
return a[x] < a[y];
});去重排序
BIT<i64> tree(n);
i64 ans = 0;
for (int i = 1; i <= n; i ++) {
tree.update(d[i], 1);
ans += i - tree.sum(d[i]);
}
*/
};
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, k;
cin >> n >> k;
vector<array<int, 3>> a(n);
for (auto &[x, y, z] : a)
cin >> x >> y >> z;
sort(a.begin(), a.end());
vector<array<int, 5>> A;
for (int i = 0; i < n; i ++) {
int j = i;
while (j + 1 < n && a[j + 1] == a[j]) {
j ++;
}
A.push_back({a[j][0], a[j][1], a[j][2], j - i + 1, 0});
i = j;
}
BIT<i64> bit(k);
auto cdq = [&](auto && self, int l, int r)->void{
if (l == r)
return ;
int mid = l + r >> 1;
self(self, l, mid);
self(self, mid + 1, r);
sort(A.begin() + l, A.begin() + mid + 1, [](auto x, auto y) {
if (x[1] == y[1]) return x[2] < y[2];
return x[1] < y[1];
});
sort(A.begin() + mid + 1, A.begin() + r + 1, [](auto x, auto y) {
if (x[1] == y[1]) return x[2] < y[2];
return x[1] < y[1];
});
int i = l, j = mid + 1;
while (j <= r) {
while (i <= mid && A[i][1] <= A[j][1]) {
bit.update(A[i][2], A[i][3]);
i ++;
}
A[j][4] += bit.sum(A[j][2]);
j ++;
}
for (int k = l; k < i; k ++)
bit.update(A[k][2], -A[k][3]);
};
cdq(cdq, 0, A.size() - 1);
vector<i64> f(n + 1);
for (auto &[a, b, c, cnt, d] : A) {
f[d + cnt - 1] += cnt;
}
for (int i = 0; i < n; i ++)
cout << f[i] << "\n";
return 0;
}
【CDQ分治】【模板】三维偏序(陌上花开)的更多相关文章
- 并不对劲的cdq分治解三维偏序
为了反驳隔壁很对劲的太刀流,并不对劲的片手流决定与之针锋相对,先一步发表cdq分治解三维偏序. 很对劲的太刀流在这里-> 参照一.二维偏序的方法,会发现一位偏序就是直接排序,可以看成通过排序使 ...
- cdq分治解决三维偏序
问题背景 在三维坐标系中有n个点,坐标为(xi,yi,zi). 定义一个点A比一个点B小,当且仅当xA<=xB,yA<=yB,zA<=zB.问对于每个点,有多少个点比它小.(n< ...
- 【算法学习】【洛谷】cdq分治 & P3810 三维偏序
cdq是何许人也?请参看这篇:https://wenku.baidu.com/view/3b913556fd0a79563d1e7245.html. 在这篇论文中,cdq提出了对修改/询问型问题(Mo ...
- hdu5618(cdq分治求三维偏序)
题意:给n(n<=100000)个点,坐标为(xi,yi,zi)(1<=xi,yi,zi<=100000),定义一个点A比一个点B小,当且仅当xA<=xB,yA<=yB, ...
- BZOJ 3262: 陌上花开 (cdq分治,三维偏序)
#include <iostream> #include <stdio.h> #include <algorithm> using namespace std; c ...
- SPOJ:Another Longest Increasing Subsequence Problem(CDQ分治求三维偏序)
Given a sequence of N pairs of integers, find the length of the longest increasing subsequence of it ...
- HDU4742 CDQ分治,三维LIS
HDU4742 CDQ分治,三维LIS 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4742 题意: 每个球都有三个属性值x,y,z,要求最长的lis的 ...
- 洛谷 P3810 【模板】三维偏序(陌上花开) (cdq分治模板)
在solve(L,R)中,需要先分治solve两个子区间,再计算左边区间修改对右边区间询问的贡献. 注意,计算额外的贡献时,两子区间各自内部的顺序变得不再重要(不管怎么样左边区间的都发生在右边之前), ...
- CDQ解决一些三维偏序的问题
本来几天前就该记录的东西,硬生生被我拖到了现在,太懒了... 在cdq学习时,二维偏序已经解决了,无非就是先sort使第一维有序,然后再用cdq或者数据结构处理第二维.而三维偏序的时候呢,大佬的做法好 ...
- CDQ分治(三维偏序集)
排序,三关键字 去重 归并排序+树状数组 #include<bits/stdc++.h> using namespace std; #define re register int cons ...
随机推荐
- 前端使用 Konva 实现可视化设计器(16)- 旋转对齐、触摸板操作的优化
这一章解决两个缺陷,一是调整一些快捷键,使得 Mac 触摸板可以正常操作:二是修复一个 Issue,使得即使素材节点即使被旋转之后,也能正常触发磁贴对齐效果,有个小坑需要注意. 请大家动动小手,给我一 ...
- RHEL8.1---离线升级gcc
升级gcc到gcc9.1.0 下载离线包.放到/opt下 [root@172-18-251-35 opt]# wget http://ftp.gnu.org/gnu/gcc/gcc-9.1.0/gcc ...
- Windows下用VS2022编译安装Boost库
Windows下用VS2022编译安装Boost库 下载地址: https://www.boost.org/users/download/ 解压得到如下文件: 编译安装: 打开vs2022命令行工具 ...
- Nuxt3 的生命周期和钩子函数(六)
title: Nuxt3 的生命周期和钩子函数(六) date: 2024/6/30 updated: 2024/6/30 author: cmdragon excerpt: 摘要:本文深入解析了Nu ...
- 分布式文件系统 FastDFS 整理
1.FastDFS 1.1.了解基础概念 1.1.1.什么是分布式文件系统? 全称:Distributed File System,即简称的DFS 这个东西可以是一个软件,也可以说是服务器,和tomc ...
- 金蝶云·苍穹追光者开发大赛,点燃高校AI应用创新之火
在 2024 年的政府工作报告中,"人工智能 +" 行动被提出,标志着人工智能成为推动我国新质生产力发展的关键力量.与此同时,今年的高考作文有一道题目也聚焦于人工智能,再次凸显了这 ...
- @Autowired和@Resource有哪些区别
一.注解的作用 @Autowired和@Resource都是用来实现Bean的自动注入功能. 二.@Autowired和@Resource的区别 1.所属的包不同 @Autowired是Spring的 ...
- 洛谷P6397
[COI2008] GLASNICI 题意描述 输入 3.000 2 0.000 6.000 输出 1.500 点拨 二分答案的题一般来说可以用答案去检验假设. 对于这道题,每一个信使的最佳走法是保证 ...
- [oeasy]python0096_游戏娱乐行业_雅达利_米洛华_四人赛马_影视结合游戏
游戏娱乐行业 回忆上次内容 游戏机行业从无到有 雅达利 公司 一枝独秀 并且带领 行业 发展起来 雅达利公司 优秀员工 乔布斯 在 朋友 帮助下完成了<pong> Jobs 黑了 Woz ...
- oeasy教您玩转vim - 10 - # 插入新行
插入新行 回忆上节课内容 i.I 在前面插入文本 a.A 在后面插入文本 o.O 换行插入文本 o 其实是 A 回车 O 其实是 k o O 也是 k A 回车 模式切换小技巧 比如你在一句话的中间, ...