#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+7;
int n,p;
int mx,tot;
struct node{int a,b,c;
}s[maxn*4];//cnt是统计相同的序列数
struct newnode{int a,b,c,cnt,ans;
}k[maxn*4];
int c[maxn];
int ljb[maxn];
int lowbit(int x){return x&(-x);
}
void update(int x,int v){while(x<=p){c[x]+=v;x+=lowbit(x);}
}
int query(int x){int sum=0;while(x){sum+=c[x];x-=lowbit(x);}return sum;
}
bool cmp1(node x,node y){if(x.a==y.a){if(x.b==y.b) return x.c<y.c;else return x.b<y.b; } return x.a<y.a;
}//第一维的关键字
bool cmp2(newnode x,newnode y){return x.b==y.b?x.c<y.c:x.b<y.b;
}
void CDQ(int l,int r){if(l==r) return;int mid=(l+r)>>1;CDQ(l,mid);CDQ(mid+1,r);sort(k+l,k+mid+1,cmp2);sort(k+mid+1,k+r+1,cmp2);int i,j=l;//两个指针 for(i=mid+1;i<=r;i++){while(k[i].b>=k[j].b&&j<=mid){//统计左边序列
            update(k[j].c,k[j].cnt);j++; } k[i].ans+=query(k[i].c);} for(int i=l;i<j;i++){update(k[i].c,-k[i].cnt);} return;
}
int main(){scanf("%d%d",&n,&p);for(int i=1;i<=n;i++){scanf("%d%d%d",&s[i].a,&s[i].b,&s[i].c);}sort(s+1,s+1+n,cmp1);//先排第一维for(int i=1;i<=n;i++){//统计重复元素,去重 tot++;if(s[i].a!=s[i+1].a||s[i].b!=s[i+1].b||s[i].c!=s[i+1].c){k[++mx].a=s[i].a;k[mx].b=s[i].b;k[mx].c=s[i].c;k[mx].cnt=tot;tot=0;}}CDQ(1,mx); for(int i=1;i<=mx;i++){ljb[k[i].ans+k[i].cnt-1]+=k[i].cnt;}for(int i=0;i<n;i++){printf("%d\n",ljb[i]);}return 0;
}

转载于:https://www.cnblogs.com/LJB666/p/11172654.html

洛谷P3810 【模板】三维偏序(陌上花开) CDQ分治初探相关推荐

  1. 分治算法,逆序对,三维偏序与CDQ分治

    分治算法基本思想 当我们求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解法在时间上相当长,或者根本无法直接求出. 对于这类问题,我们往往先把它分解成几个子问题,找到求出 ...

  2. 洛谷 P5459 [BJOI2016]回转寿司 【CDQ分治】

    题目链接 题意 给出一个序列,求有几个子段和 sumsumsum 满足L≤sum≤RL \le sum \le RL≤sum≤R 题解 设 pren=∑i=1naipre_n=\sum_{i=1}^{ ...

  3. 洛谷 P3157 [CQOI2011]动态逆序对 | CDQ分治

    题目:https://www.luogu.org/problemnew/show/3157 题解: 1.对于静态的逆序对可以用树状数组做 2.我们为了方便可以把删除当成增加,可以化动为静 3.找到三维 ...

  4. hdu5618 (三维偏序,cdq分治)

    给定空间中的n个点,问每个点有多少个点小于等于自己. 先来分析简单的二维的情况,那么只要将x坐标排序,那么这样的问题就可以划分为两个子问题,,这样的分治有一个特点,即前一个子问题的解决是独立的,而后一 ...

  5. 洛谷 - P3810 【模板】三维偏序(陌上花开)(CDQ分治套树状数组)

    题目链接:点击查看 题目大意:给出 n 个点,每个点有三个属性 a , b , c ,对于每个点 i 来说,求出有多少个 j 满足 a[ j ] <= a[ i ] && b[ ...

  6. 题解 三维偏序(陌上花开)+黑科技食用

    Sol 前言 在看题目之前,先给大家安利一个好博客,博主就是用过这篇博客和巨佬YCB的帮助下学会的 想学会CDQ就戳我 题目大意 有nnn个元素,第i" role="present ...

  7. 【BZOJ-3262】陌上花开 CDQ分治(3维偏序)

    3262: 陌上花开 Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 1439  Solved: 648 [Submit][Status][Discu ...

  8. 专题·树链剖分【including 洛谷·【模板】树链剖分

    初见安~~~终于学会了树剖~~~ [兴奋]当初机房的大佬在学树剖的时候我反复强调过:"学树剖没有前途的!!!" 恩.真香. 一.重链与重儿子 所谓树剖--树链剖分,就是赋予一个链的 ...

  9. 洛谷·【模板】点分树 | 震波【including 点分树

    初见安-这里是传送门:洛谷P6329 [模板]点分树 | 震波 一.点分树 其实你会点分治的话,点分树就是把点分治时的重心提出来重新连城一棵树. 比如当前点是u,求出子树v的重心root后将root与 ...

  10. BZOJ3262: 陌上花开(cdq分治)

    Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 3627  Solved: 1705 [Submit][Status][Discuss] Descri ...

最新文章

  1. java s0 s1_Java GC 变量含义(S0 S1 E O P YGC YGCT FGC FGCT GCT)详解
  2. 听说,京沪津的人都爱直接“看牌”买买买
  3. 平板电脑什么牌子好点_什么平板电脑充电柜好?
  4. 华为电视测试软件,华为智慧屏电视安装第三方软件,简单实测可行攻略
  5. kerberos的故事2
  6. 虚拟存储器管理c语言_内存管理;虚拟内存
  7. 在idea中创建mybatis-config.xml模板(在idea中创建mybatis核心配置文件模板)
  8. 操作日志的设计小结by大熊
  9. 记录一举一动:PowerShell几行代码实现定期屏幕截屏
  10. 对于java引用的总结
  11. java包限制使用时间_给jar包加壳限制使用时间
  12. DRILLNET 2.0------第八章 预防碰撞分析模型
  13. IDEA导入MySQL驱动包(Mac版)
  14. 操作系统分区原理(笔记)
  15. 离散数学第二版傅彦课后题答案_青年大最新答案第十季第四期答案 完整版题目和答案分享[多图]...
  16. modbus rtu与计算机通讯,关于modbus rtu一个主站与多个从站通信的一点总结
  17. (超全)全面手动清理c盘的的步骤
  18. 基于vue2全家桶实现的,仿移动端QQ
  19. 微擎 人人商城 头像获取失败问题
  20. 【编程不良人】快速入门Spring学习笔记08---事务属性、Spring整合Structs2框架(SM)、Spring整合Mybatis+Struts2(SSM)、Spring注解、SSM注解式开发

热门文章

  1. Cordova build构建常见问题整理
  2. Scala声明函数示例
  3. python3 连接数据库
  4. MySQL中using的用法
  5. php连接数据库语言,PHP语言连接MYSQL数据库实例代码
  6. Centos7.9禁用密码登录
  7. 【规范】流程图的标准画法
  8. Java多线程例子讲解
  9. while(1); 作用
  10. 强化学习1——策略,价值函数,模型