算法复习——cdq分治
题目:
Description
Input
Output
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
1 <= N <= 100,000, 1 <= K <= 200,000
Source
题解:
CDQ分治解三维偏序的模板题,以下是关于cdq分治的大概介绍





CDQ的核心就是分为左右两组后,算左边对右边的贡献····
但CDQ分治运用最广泛的是解决偏序的问题···比如上面的陌上花开就是解决关于(a,b,c)的三维偏序问题····
解决这类问题的核心是降维···一个一个忽略每一维影响···比如这道题,先以a优先排序,从而只用管b和c···然后在分成左右两组时每组以b优先排序··进而最后利用树状数组解决c
详细见:http://www.cnblogs.com/mlystdcall/p/6219421.html
不得不说真神奇·····
代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<cctype>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const int N=1e5+;
const int M=2e5+;
inline int R()
{
char c;int f=,i=;
for(c=getchar();(c<''||c>'')&&c!='-';c=getchar());
if(c=='-') i=-,c=getchar();
for(;c<=''&&c>='';c=getchar())
f=(f<<)+(f<<)+c-'';
return f*i;
}
struct node
{
int x,y,z,cnt,ans;
}f[N],a[N];
bool cmp(node a,node b)
{
if(a.x==b.x&&a.y==b.y) return a.z<b.z;
else if(a.x==b.x) return a.y<b.y;
else return a.x<b.x;
}
int m,n,k,tot,tree[M],ans[N];
inline bool operator < (node a,node b)
{
if(a.y==b.y) return a.z<b.z;
else return a.y<b.y;
}
inline void insert(int u,int w)
{
for(int i=u;i<=k;i+=(i&(-i)))
tree[i]+=w;
}
inline int query(int u)
{
int temp=;
for(int i=u;i>;i-=(i&(-i)))
temp+=tree[i];
return temp;
}
inline void solve(int l,int r)
{
if(l==r) return;
int mid=(l+r)/,i,j;
solve(l,mid),solve(mid+,r);
sort(a+l,a+mid+);sort(a+mid+,a+r+);
i=l,j=mid+;
while(j<=r)
{
while(i<=mid&&a[i].y<=a[j].y)
{
insert(a[i].z,a[i].cnt);i++;
}
a[j].ans+=query(a[j].z);j++;
}
for(j=l;j<i;j++) insert(a[j].z,-a[j].cnt);
}
int main()
{
//freopen("a.in","r",stdin);
m=R(),k=R();
for(int i=;i<=m;i++)
{
f[i].x=R();f[i].y=R();f[i].z=R();
}
sort(f+,f+m+,cmp);
a[++n]=f[];tot=;
a[].cnt=;
for(int i=;i<=m;i++)
{
if(f[i].x!=f[i-].x||f[i].y!=f[i-].y||f[i].z!=f[i-].z) ++n,tot=;
else tot++;
a[n]=f[i],a[n].cnt=tot;
}
solve(,n);
for(int i=;i<=n;i++)
ans[a[i].ans+a[i].cnt-]+=a[i].cnt;
for(int i=;i<m;i++)
printf("%d\n",ans[i]);
return ;
}
算法复习——cdq分治的更多相关文章
- 【算法】CDQ分治 -- 三维偏序 & 动态逆序对
初次接触CDQ分治,感觉真的挺厉害的.整体思路即分而治之,再用之前处理出来的答案统计之后的答案. 大概流程是(对于区间 l ~ r): 1.处理 l ~mid, mid + 1 ~ r 的答案: 2. ...
- 算法笔记--CDQ分治 && 整体二分
参考:https://www.luogu.org/blog/Owencodeisking/post-xue-xi-bi-ji-cdq-fen-zhi-hu-zheng-ti-er-fen 前置技能:树 ...
- 算法复习——平面分治(hud1007)
题目: 问题描述 : Have you ever played quoit in a playground? Quoit is a game in which flat rings are pitch ...
- 算法复习——序列分治(ssoj光荣的梦想)
题目: 题目描述 Prince对他在这片大陆上维护的秩序感到满意,于是决定启程离开艾泽拉斯.在他动身之前,Prince决定赋予King_Bette最强大的能量以守护世界.保卫这里的平衡与和谐.在那个时 ...
- BZOJ1173 CDQ分治 笔记
目录 二维数据结构->cdq 预备知识 T1: 二维树状数组 T2:cdq分治 bzoj1176 mokia:Debug心得 一类特殊的CDQ分治 附: bzoj mokia AC代码 二维数据 ...
- 【BZOJ3237】【AHOI2013】连通图 [CDQ分治]
连通图 Time Limit: 20 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description Input Output Sampl ...
- CDQ 分治
引言: 什么是CDQ分治?其实这是一种思想而不是具体算法,因此CDQ分治覆盖的范围相当广泛,在 OI 界初见于陈丹琦 2008 年的集训队作业中,故被称为CDQ分治. 大致分为三类: cdq分治解决与 ...
- 【算法学习】【洛谷】cdq分治 & P3810 三维偏序
cdq是何许人也?请参看这篇:https://wenku.baidu.com/view/3b913556fd0a79563d1e7245.html. 在这篇论文中,cdq提出了对修改/询问型问题(Mo ...
- CDQ分治--用时间降维的美丽算法
CDQ分治–用时间降维的美丽算法 CDQ分治,网上的阐述很多,太专业性的文字我就不赘述,这里指谈谈自己的感受 还是%一下CDQ大神的论文 CDQ分治的主要想法就是降维(比如三维问题降维到二维问题),并 ...
随机推荐
- 用YII实现多重查询(基于tag)
场景: 有一个饭店表 restaurant,存放所有饭店记录.我需要一个功能,将饭店按照不同的条件进行多重查询.就象这样: 氛围:浪漫 / 商务会谈 / 茅草屋 菜系:川菜 / 鲁菜 / 家常菜. ...
- Android学习总结(十八) ———— SQLite数据库使用
一.基本概念 数据库最经典的四个操作 添加.删除.修改.查找,在处理大量数据的时候使用数据库可以帮我们迅速定位当前须要处理的数据,举个例子 好比现在要实现一个搜索功能 用数据库的话只须要其中一个搜索条 ...
- Maven01
1. Maven简单介绍 Apache Maven是个项目管理和自动构建工具,基于项目对象模型(POM)的概念. 作用:完成项目的相关操作,如:编译,构建,单元测试,安装,网站生成和基于Maven部 ...
- Asp.Net Core 入门(七)—— 安装Bootstrap
我们使用 libman包管理器来安装,libman是微软推出的最新的包管理器,它是一个轻量级的客户端管理工具,可以从CDN下载客户端库和框架,它要求VS Studio必须在2017版本15.8或更高版 ...
- 【C语言项目】贪吃蛇游戏(下)
目录 00. 目录 07. 游戏逻辑 7.5 按下ESC键结束游戏 7.6 判断是否撞到墙 7.7 判断是否咬到自己 08. 游戏失败界面设计 8.1 游戏失败界面边框设计 8.2 撞墙失败界面 8. ...
- 第2节 azkaban调度:1、azkaban的调度任务使用
2.4 Azkaban实战 Azkaba内置的任务类型支持command.java Command类型单一job示例 创建job描述文件 创建文本文件,更改名称为mycommand.job 注意后缀. ...
- DP玄学优化——斜率优化
--以此博客来悼念我在\(QBXT\)懵逼的时光 \(rqy\; tql\) (日常%\(rqy\)) 概念及用途 斜率优化是\(DP\)的一种较为常用的优化(据说在高中课本里稍有提及),它可以用于优 ...
- Bootstrap历练实例:块级按钮
<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...
- 【数位dp】bzoj1799: [Ahoi2009]self 同类分布
各种奇怪姿势的数位dp Description 给出a,b,求出[a,b]中各位数字之和能整除原数的数的个数. Sample Input 10 19 Sample Output 3 HINT [约束条 ...
- mysql 备份解密脚本
#!/bin/bash #by sk 备份解码脚本 echo "-------------------------------------------------" functio ...