题目大意:有$n$个元素,第$i$个元素有三个属性$a_i,b_i,c_i$,设$f(i)=\sum\limits_{i\not = j}[a_j\leqslant a_i,b_j\leqslant b_i,c_j\leqslant c_i]$,令$d(i)=\sum\limits_{j=1}^n[f(j)=i]$,求$d$

题解:三位偏序,我用了$CDQ$分治,$a$排序解决,$b$$CDQ$分治,$c$用树状数组

卡点:

C++ Code:

#include <cstdio>
#include <algorithm>
#define maxn 100010
#define maxm 200010
int n, k, tot;
int d[maxn];
struct node {
int a, b, c, cnt, f;
inline bool operator == (const node &rhs) const {
return (a == rhs.a && b == rhs.b && c == rhs.c);
}
} v[maxn], s[maxn];
inline bool cmpb(node lhs, node rhs) {return lhs.b == rhs.b ? lhs.c < rhs.c : lhs.b < rhs.b;}
inline bool cmpa(node lhs, node rhs) {return lhs.a == rhs.a ? cmpb(lhs, rhs) : lhs.a < rhs.a;}
namespace Binary_Indexed_Tree {
int Tr[maxm];
int res;
inline void add(int p, int num) {for (; p <= k; p += p & -p) Tr[p] += num;}
inline int ask(int p) {res = 0; for (; p; p &= p - 1) res += Tr[p]; return res;}
}
using Binary_Indexed_Tree::add;
using Binary_Indexed_Tree::ask;
void CDQ(int l, int r) {
if (l == r) return ;
int mid = l + r >> 1;
CDQ(l, mid); CDQ(mid + 1, r);
std::sort(s + l, s + mid + 1, cmpb);
std::sort(s + mid + 1, s + r + 1, cmpb);
int pl = l, pr = mid + 1;
while (pl <= mid && pr <= r) {
if (s[pl].b <= s[pr].b) add(s[pl].c, s[pl].cnt), pl++;
else s[pr].f += ask(s[pr].c), pr++;
}
while (pr <= r) s[pr].f += ask(s[pr].c), pr++;
for (int i = l; i < pl; i++) add(s[i].c, -s[i].cnt);
}
int main() {
scanf("%d%d", &n, &k);
for (int i = 1; i <= n; i++) scanf("%d%d%d", &v[i].a, &v[i].b, &v[i].c);
std::sort(v + 1, v + n + 1, cmpa);
for (int i = 1, j; (j = i) <= n; i = j) {
while (j <= n && v[i] == v[j]) j++;
s[++tot] = v[i]; s[tot].cnt = j - i;
}
CDQ(1, tot);
for (int i = 1; i <= tot; i++) d[s[i].f + s[i].cnt] += s[i].cnt;
for (int i = 1; i <= n; i++) printf("%d\n", d[i]);
return 0;
}

  

最新文章

  1. Programming Entity Framework 翻译(1)-目录
  2. Android 4.4沉浸式状态栏的实现
  3. ubuntu NTP server 搭建
  4. NSNumber,NSValue和NSData
  5. Json知识总结
  6. ios多线程的几种创建方式以及基本使用
  7. C#中如何利用操作符重载和转换操作符
  8. 从 Racket 入门函数式编程
  9. 移动web:图片切换(焦点图)
  10. C++中的引用和移动语义
  11. nexus安装
  12. 模拟赛20181016 Uva 1040 状压+搜索 2005 ACM world final problem c
  13. moogodb 安装及简单介绍
  14. GBT 31000-2015 社会治安综合治理基础数据规范 数据项 编码
  15. python fabric实现远程操作和部署示例
  16. phpstudy的使用
  17. 【做题】apc001_f-XOR Tree——巧妙转化及dp
  18. Vue 中 export及export default的区别
  19. 探索photo-sphere-viewer全景插件
  20. lodop打印控件需要开启的几个计算机服务

热门文章

  1. 简单webservice实现(xFire1.2)
  2. 【杂题总汇】UVa-10618 Tango Tango Insurrection
  3. lintcode_111_爬楼梯
  4. JS - 兼容的事件助手
  5. 使用JDBC操作数据库
  6. JAVA / MySql 编程——第七章 JDBC
  7. 【c学习-2】
  8. PHP 使用GD库合成带二维码和圆形头像的海报步骤以及源码实现
  9. python3 练习题100例 (十八)托儿所问题
  10. debug注意事项