洛谷P3810 【模板】三维偏序(陌上花开) CDQ分治初探
#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分治初探相关推荐
- 分治算法,逆序对,三维偏序与CDQ分治
分治算法基本思想 当我们求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解法在时间上相当长,或者根本无法直接求出. 对于这类问题,我们往往先把它分解成几个子问题,找到求出 ...
- 洛谷 P5459 [BJOI2016]回转寿司 【CDQ分治】
题目链接 题意 给出一个序列,求有几个子段和 sumsumsum 满足L≤sum≤RL \le sum \le RL≤sum≤R 题解 设 pren=∑i=1naipre_n=\sum_{i=1}^{ ...
- 洛谷 P3157 [CQOI2011]动态逆序对 | CDQ分治
题目:https://www.luogu.org/problemnew/show/3157 题解: 1.对于静态的逆序对可以用树状数组做 2.我们为了方便可以把删除当成增加,可以化动为静 3.找到三维 ...
- hdu5618 (三维偏序,cdq分治)
给定空间中的n个点,问每个点有多少个点小于等于自己. 先来分析简单的二维的情况,那么只要将x坐标排序,那么这样的问题就可以划分为两个子问题,,这样的分治有一个特点,即前一个子问题的解决是独立的,而后一 ...
- 洛谷 - P3810 【模板】三维偏序(陌上花开)(CDQ分治套树状数组)
题目链接:点击查看 题目大意:给出 n 个点,每个点有三个属性 a , b , c ,对于每个点 i 来说,求出有多少个 j 满足 a[ j ] <= a[ i ] && b[ ...
- 题解 三维偏序(陌上花开)+黑科技食用
Sol 前言 在看题目之前,先给大家安利一个好博客,博主就是用过这篇博客和巨佬YCB的帮助下学会的 想学会CDQ就戳我 题目大意 有nnn个元素,第i" role="present ...
- 【BZOJ-3262】陌上花开 CDQ分治(3维偏序)
3262: 陌上花开 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 1439 Solved: 648 [Submit][Status][Discu ...
- 专题·树链剖分【including 洛谷·【模板】树链剖分
初见安~~~终于学会了树剖~~~ [兴奋]当初机房的大佬在学树剖的时候我反复强调过:"学树剖没有前途的!!!" 恩.真香. 一.重链与重儿子 所谓树剖--树链剖分,就是赋予一个链的 ...
- 洛谷·【模板】点分树 | 震波【including 点分树
初见安-这里是传送门:洛谷P6329 [模板]点分树 | 震波 一.点分树 其实你会点分治的话,点分树就是把点分治时的重心提出来重新连城一棵树. 比如当前点是u,求出子树v的重心root后将root与 ...
- BZOJ3262: 陌上花开(cdq分治)
Time Limit: 20 Sec Memory Limit: 256 MB Submit: 3627 Solved: 1705 [Submit][Status][Discuss] Descri ...
最新文章
- java s0 s1_Java GC 变量含义(S0 S1 E O P YGC YGCT FGC FGCT GCT)详解
- 听说,京沪津的人都爱直接“看牌”买买买
- 平板电脑什么牌子好点_什么平板电脑充电柜好?
- 华为电视测试软件,华为智慧屏电视安装第三方软件,简单实测可行攻略
- kerberos的故事2
- 虚拟存储器管理c语言_内存管理;虚拟内存
- 在idea中创建mybatis-config.xml模板(在idea中创建mybatis核心配置文件模板)
- 操作日志的设计小结by大熊
- 记录一举一动:PowerShell几行代码实现定期屏幕截屏
- 对于java引用的总结
- java包限制使用时间_给jar包加壳限制使用时间
- DRILLNET 2.0------第八章 预防碰撞分析模型
- IDEA导入MySQL驱动包(Mac版)
- 操作系统分区原理(笔记)
- 离散数学第二版傅彦课后题答案_青年大最新答案第十季第四期答案 完整版题目和答案分享[多图]...
- modbus rtu与计算机通讯,关于modbus rtu一个主站与多个从站通信的一点总结
- (超全)全面手动清理c盘的的步骤
- 基于vue2全家桶实现的,仿移动端QQ
- 微擎 人人商城 头像获取失败问题
- 【编程不良人】快速入门Spring学习笔记08---事务属性、Spring整合Structs2框架(SM)、Spring整合Mybatis+Struts2(SSM)、Spring注解、SSM注解式开发