BZOJ3262: 陌上花开(cdq分治)
Submit: 3627 Solved: 1705
[Submit][Status][Discuss]
Description
Input
Output
包含N行,分别表示评级为0...N-1的每级花的数量。
Sample Input
3 3 3
2 3 3
2 3 1
3 1 1
3 1 2
1 3 1
1 1 2
1 2 2
1 3 2
1 2 1
Sample Output
1
3
0
1
0
1
0
0
1
HINT
Source
感觉cdq分治和归并排序很像qwq。
第一维可以用排序搞掉
这样我们用cdq分治统计$(l,r)$这段区间的时候只需要考虑$b$和$c$的贡献,而且只需要考虑区间$(l, mid)$对$mid + 1, r$的贡献
用树状数组维护第三维的贡献
#include<cstdio> #include<algorithm> #define lowbit(x) ((x) & (-x)) using namespace std; const int MAXN = 200001; inline int read() {char c = getchar(); int x = 0, f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();return x * f; } int N, Max; struct Node {int a, b, c, f, w;bool operator < (const Node &rhs) const{return (a == rhs.a && b == rhs.b) ? (c < rhs.c) : (a == rhs.a ? b < rhs.b : a < rhs.a);} }A[MAXN], tp[MAXN]; int num = 0, ans[MAXN]; int T[MAXN]; void Add(int pos, int val) {for(int i = pos; i <= Max; i += lowbit(i)) T[i] += val; } int Query(int pos) {int ans = 0;for(int i = pos; i; i -= lowbit(i)) ans += T[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 i = l, j = mid + 1, P = l;while(i <= mid || j <= r) {if(j > r || (i <= mid && A[i].b <= A[j].b)) Add(A[i].c, A[i].w), tp[P++] = A[i++];else A[j].f += Query(A[j].c), tp[P++] = A[j++];}for(int i = l; i <= mid; i++) Add(A[i].c, -A[i].w);for(int i = l; i <= r; i++) A[i] = tp[i]; } int main() { #ifdef WIN32freopen("a.in", "r", stdin); #endifN = read(); Max = read();for(int i = 1; i <= N; i++) A[i].a = read(), A[i].b = read(), A[i].c = read(), A[i].w = 1;sort(A + 1, A + N + 1);num = 1;for(int i = 2; i <= N; i++)if(A[i].a == A[num].a && A[i].b == A[num].b && A[i].c == A[num].c) A[num].w++;else A[++num] = A[i];CDQ(1, num);for(int i = 1; i <= num; i++) ans[A[i].f + A[i].w - 1] += A[i].w;for(int i = 0; i <= N - 1; i++)printf("%d\n", ans[i]);return 0; }
转载于:https://www.cnblogs.com/zwfymqz/p/9282370.html
BZOJ3262: 陌上花开(cdq分治)相关推荐
- 【BZOJ-3262】陌上花开 CDQ分治(3维偏序)
3262: 陌上花开 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 1439 Solved: 648 [Submit][Status][Discu ...
- 陌上花开 HYSBZ - 3262 (CDQ分治)
陌上花开 HYSBZ - 3262 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),用三个整数表示. 现在要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量. 定义一朵花A比另 ...
- bzoj 3262: 陌上花开(cdq分治)
3262: 陌上花开 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 2433 Solved: 1087 [Submit][Status][Disc ...
- 洛谷 - P3810 【模板】三维偏序(陌上花开)(CDQ分治套树状数组)
题目链接:点击查看 题目大意:给出 n 个点,每个点有三个属性 a , b , c ,对于每个点 i 来说,求出有多少个 j 满足 a[ j ] <= a[ i ] && b[ ...
- CDQ分治[陌上花开 ]
关于CDQ,是大神陈丹琦写出来的算法,具体的看这个连接 https://www.cnblogs.com/lck-lck/p/9657753.html https://blog.csdn.net/wu_ ...
- [BZOJ3262]陌上花开
[BZOJ3262]陌上花开 题目大意: \(n(n\le10^5)\)个三元组\((x,y,z)(x,y,z\le2\times10^6)\),求三位偏序. 思路: CDQ分分治套树状数组.需要注意 ...
- [总结]CDQ分治整体二分
从昨天到现在除了90%的颓废时间一直在研究一些分治的姿势,主要就是CDQ分治和整体二分. 首先推荐一些学习资料: 陈丹琦 <从 < Cash > 谈一类分治算法的应用> 许昊然 ...
- bzoj3262: 陌上花开
bzoj3262: 陌上花开 陌上花开 Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),用三个整数表示. 现在要对每朵花评级,一朵花的级别是它拥有的美丽能超过的 ...
- 【教程】简易CDQ分治教程学习笔记
前言 辣鸡蒟蒻__stdcall终于会CDQ分治啦! CDQ分治是我们处理各类问题的重要武器.它的优势在于可以顶替复杂的高级数据结构,而且常数比较小:缺点在于必须离线操作. CDQ分治的基 ...
最新文章
- Nginx HTTP 负载均衡和反向代理
- Xamarin XAML语言教程使用方法设置进度条进度
- Android入门(十二)SQLite事务、升级数据库
- mybitas oracle.sql.clob,Oracle使用简单函数
- 飞鸽传书2007程序语言的面向对象最后会成自然语言吗?
- JMeter记录篇2——性能测试基础(2)
- CUDA中并行规约(Parallel Reduction)的优化
- xrdp协议_XRDP与VNC的关系(转载)
- BI笔记之---BI通用流程zz
- 2 python包、模块相关
- 模式识别和机器学习--- 2.3高斯分布
- Visio使用技巧总结
- 设计模式-工厂模式(Factory)
- win10系统中“无法使用内置管理员账户打开,请使用其他账户登录再试一次“
- 详解如何在npmjs上上传和更新属于自己的组件库
- TypeError: object() takes no parameters
- WPF 元素裁剪 Clip 属性
- java金额三位一撇方法_Java数据格式化问题
- 机器学习-神经网络(Neural Network)算法
- linux malloc错误,如何规避GCC中“尝试使用中毒的malloc / calloc”错误?
热门文章
- 51 nod 1624 取余最长路 思路:前缀和 + STL(set)二分查找
- c语言使用求余方式的转化为二进制程序,C语言第三讲 程序结构 (下).ppt
- css 样式三元运算_CSS扩展语言——Sass入门指南
- 深度讲解spring的循环依赖以及三级缓存
- Mysql(9)——排序的方法order by与limit的用法
- scikit-learn 朴素贝叶斯类库使用小结
- java中ftp删除文件,Java 实现ftp 文件上传、下载和删除
- 完全二叉树的结点个数
- C++ IO类(3) 文件流
- 计算机复试通知学校,提醒:部分学校复试通知已经出了!教育部关于21考研复试的规定!...