1. #include <iostream>
  2. #include <stdio.h>
  3. #include <algorithm>
  4. using namespace std;
  5. const int maxn=1e5+10;
  6. const int maxk=2e5+10;
  7. int n,k;
  8. struct Triple {
  9. int a,b,c,cnt,ans;
  10. }a[maxn],A[maxn];
  11. bool cmp(const Triple &a,const Triple &b) {
  12. if (a.a!=b.a) {
  13. return a.a<b.a;
  14. }
  15. else if (a.b!=b.b) {
  16. return a.b<b.b;
  17. }
  18. return a.c<b.c;
  19. }
  20. struct BitIndexTree {
  21. int a[maxk];
  22. int lowbit(const int x) {
  23. return x&(-x);
  24. }
  25. void Update(const int x,const int delta) {
  26. for (int i=x;i<=k;i+=lowbit(i)) {
  27. a[i]+=delta;
  28. }
  29. }
  30. void Clean(const int x) {
  31. for (int i=x;i<=k;i+=lowbit(i)) {
  32. if (a[i]) {
  33. a[i]=0;
  34. }
  35. else {
  36. break;
  37. }
  38. }
  39. }
  40. int Query(const int x) {
  41. int ans=0;
  42. for (int i=x;i>0;i-=lowbit(i)) {
  43. ans+=a[i];
  44. }
  45. return ans;
  46. }
  47. }bit;
  48. void CDQ(Triple *l,Triple *r)
  49. {
  50. if (l==r) {
  51. l->ans+=l->cnt-1;
  52. return ;
  53. }
  54. Triple *mid=l+(r-l)/2;
  55. CDQ(l,mid);
  56. CDQ(mid+1,r);
  57. static Triple tmp[maxn];
  58. for (Triple *p=tmp,*p1=l,*p2=mid+1;p<=tmp+(r-l);p++) {
  59. if ((p1<=mid&&p1->b<=p2->b)||p2>r) {
  60. *p=*p1++;
  61. bit.Update(p->c,p->cnt);
  62. }
  63. else {
  64. *p=*p2++;
  65. p->ans+=bit.Query(p->c);
  66. }
  67. }
  68. for (Triple *p=tmp,*q=l;q<=r;p++,q++) {
  69. bit.Clean(p->c);
  70. *q=*p;
  71. }
  72. }
  73. template <typename T>
  74. inline void read(T &x)
  75. {
  76. int f=1;
  77. x=0;
  78. register char ch;
  79. ch=getchar();
  80. while (ch>'9'||ch<'0') {
  81. if (ch=='-') {
  82. f=-f;
  83. }
  84. ch=getchar();
  85. }
  86. while (ch>='0'&&ch<='9') {
  87. x=x*10+ch-'0';
  88. ch=getchar();
  89. }
  90. x*=f;
  91. }
  92. inline void write(int x)
  93. {
  94. if (x<0) {
  95. putchar('-');
  96. }
  97. if (x>9) {
  98. write(x/10);
  99. }
  100. putchar(x%10+'0');
  101. }
  102. int main()
  103. {
  104. scanf("%d%d",&n,&k);
  105. for (int i=0;i<n;i++) {
  106. read(a[i].a),read(a[i].b),read(a[i].c);
  107. // scanf("%d%d%d",&a[i].a,&a[i].b,&a[i].c);
  108. a[i].cnt=1;
  109. }
  110. sort(a,a+n,cmp);
  111. int cnt=0;
  112. for (int i=0;i<n;i++) {
  113. if (i==0||!(a[i].a==a[i-1].a&&a[i].b==a[i-1].b&&a[i].c==a[i-1].c)) {
  114. A[cnt++]=a[i];
  115. }
  116. else {
  117. A[cnt-1].cnt+=1;
  118. }
  119. }
  120. CDQ(A,A+cnt-1);
  121. static int ans[maxn];
  122. for (int i=0;i<cnt;i++) {
  123. ans[A[i].ans]+=A[i].cnt;
  124. }
  125. for (int i=0;i<n;i++) {
  126. write(ans[i]);
  127. putchar('\n');
  128. // printf("%d\n",ans[i]);
  129. }
  130. return 0;
  131. }

BZOJ 3262: 陌上花开 (cdq分治,三维偏序)的更多相关文章

  1. BZOJ 3262: 陌上花开 [CDQ分治 三维偏序]

    Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当 ...

  2. bzoj 3262 陌上花开 - CDQ分治 - 树状数组

    Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当 ...

  3. 洛谷P3810 陌上花开 CDQ分治(三维偏序)

    好,这是一道三维偏序的模板题 当然没那么简单..... 首先谴责洛谷一下:可怜的陌上花开的题面被无情的消灭了: 这么好听的名字#(滑稽) 那么我们看了题面后就发现:这就是一个三维偏序.只不过ans不加 ...

  4. BZOJ 3262 陌上花开 ——CDQ分治

    [题目分析] 多维问题,我们可以按照其中一维排序,然后把这一维抽象的改为时间. 然后剩下两维,就像简单题那样,排序一维,树状数组一维,按照时间分治即可. 挺有套路的一种算法. 时间的抽象很巧妙. 同种 ...

  5. BZOJ 3262 陌上花开 CDQ分治

    = =原来复杂度还是nlog^2(n) Orz 被喷了 #include<cstdio> #include<cstdlib> #include<algorithm> ...

  6. BZOJ - 1935 / 1176 cdq分治 三维偏序

    题意:给定n*m的网格,且给出n个(x,y)表示该网格已被占有,q次询问(x1,y1)到(x2,y2)的网格中有多少个被占有,n,m范围1e7,q范围5e5 cdq按x轴排序,树状数组维护y轴 #in ...

  7. BZOJ 2244: [SDOI2011]拦截导弹 (CDQ分治 三维偏序 DP)

    题意 略- 分析 就是求最长不上升子序列,坐标取一下反就是求最长不下降子序列,比较大小是二维(h,v)(h,v)(h,v)的比较.我们不看概率,先看第一问怎么求最长不降子序列.设f[i]f[i]f[i ...

  8. cdq分治·三维偏序问题

    转载自FlashHu大佬的博客CDQ分治总结(CDQ,树状数组,归并排序),在讲述部分有部分删改,用了自己的代码 CDQ分治的思想 CDQ分治是基于时间的离线分治算法.这一类分治有一个重要的思想——用 ...

  9. 【算法】CDQ分治 -- 三维偏序 & 动态逆序对

    初次接触CDQ分治,感觉真的挺厉害的.整体思路即分而治之,再用之前处理出来的答案统计之后的答案. 大概流程是(对于区间 l ~ r): 1.处理 l ~mid, mid + 1 ~ r 的答案: 2. ...

随机推荐

  1. yii csrf 配置

    csrf默认启用 全局配置 'components'=>array( 'request'=>array( // Enable Yii Validate CSRF Token 'enable ...

  2. bugku sql2

    sql注入2 200 http://123.206.87.240:8007/web2/ 全都tm过滤了绝望吗? 提示 !,!=,=,+,-,^,%

  3. Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3) B Box

    #include<bits/stdc++.h> using namespace std; ]; ]; int main() { int total; cin>>total; w ...

  4. Jquery change方法

    jQuery 事件 - change() 方法 当输入域发生变化时改变其颜色: $(".field").change(function(){ $(this).css("b ...

  5. windows下pycharm输入法跟随设置

    参考网址:http://www.itdaan.com/blog/2018/05/20/90e64dae077f8ad7fa70bc9c3c8ab422.html

  6. python3爬取百度知道的问答并存入数据库(MySQL)

    一.链接分析: 以"Linux"为搜索的关键字为例: 首页的链接为:https://zhidao.baidu.com/search?lm=0&rn=10&pn=0& ...

  7. IntelliJ IDEA 2017.3尚硅谷-----取消更新

  8. cmd命令和快捷键

    命令 含义 盘名: 从C盘到其他盘时输入 dir 查看当前文件夹下的内容 cd 目录名称 选择目录 cd.. 退回当前目录的上一级目录 cd\ 回到根目录 md 目录名称 创建目录 rd 目录名称 删 ...

  9. 题解【洛谷P4588】[TJOI2018]数学计算

    题目描述 小豆现在有一个数\(x\),初始值为\(1\).小豆有\(Q\)次操作,操作有两种类型: \(1\;m\):\(x=x\times m\)输出\(x\%mod\); \(2\;pos\):\ ...

  10. 购物单 && 动态规划 && 背包问题

    题目叙述的言语倒是蛮多的: 王强今天很开心,公司发给N元的年终奖.王强决定把年终奖用于购物,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子: 主件 附件 电脑 ...