胡扯两句——CDQ分治
之前听大神讲过CDQ分治大概是个什么东西,但是一直还没有真正去搞过。今天稍微看了一下,写点自己的理解。
首先CDQ分治有两个条件。
条件1:可以分成两个独立互不影响的问题(这里的“独立”是指将前面区间的影响处理掉后,后面与前面都成为了新的相同问题)
条件2:允许离线(据说最近流行强制在线。。。如果这样只好去写恶心的数据结构了)。
CDQ分治在可以使用的情况下很多高级数据结构题可以用CDQ分治干过去,不仅时空优越而且易于调试(虽然我并不觉得很好调试
大体思路是将问题不断分成两个子问题,用前一个子问题中的修改操作去更新后一个子问题,这样之后就得到了两个互不影响的子问题,达到分治的目的。
贴一道版题代码:BZOJ 1176
#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) ((x)&-(x))
struct data{
int v,x,y,d,f,pos;
bool operator <(const data& w)const{
if(x!=w.x) return x<w.x;
if(y!=w.y) return y<w.y;
return pos<w.pos;
}
}a[],tmp[];
int s,w,t[],cnt,ans[];
int read(int& x){
x=; int f=,a=getchar();
while(a<'' || a>'') {if(a=='-') f=-; a=getchar();}
while(a>='' && a<='') x=x*+a-'',a=getchar(); x*=f;
}
inline void add(int y,int x){for(int i=y;i<=w;i+=lowbit(i)) t[i]+=x;}
inline int query(int y){int ret=; for(int i=y;i;i-=lowbit(i)) ret+=t[i]; return ret;}
void CDQ(int l,int r){
if(l==r) return;
int mid=(l+r)>>,t1=l-,t2=mid; //这里写错调了老半天
for(int i=l;i<=r;i++){
if(a[i].v<=mid && !a[i].pos) add(a[i].y,a[i].d);
if(a[i].v>mid && a[i].pos) ans[a[i].pos]+=query(a[i].y)*a[i].f;
}
for(int i=l;i<=r;i++)
if(a[i].v<=mid && !a[i].pos) add(a[i].y,-a[i].d);
for(int i=l;i<=r;i++)
if(a[i].v<=mid) tmp[++t1]=a[i];
else tmp[++t2]=a[i];
for(int i=l;i<=r;i++) a[i]=tmp[i];
CDQ(l,mid); CDQ(mid+,r);
}
int main(){
read(s); read(w); int t,x,y,d,x1,x2,y1,y2;
while(){
read(t);
if(t==){
read(x); read(y); read(d);
a[++cnt]=(data){cnt,x,y,d,,};
}else if(t==){
read(x1); read(y1); read(x2); read(y2); ++ans[];
a[++cnt]=(data){cnt,x1-,y1-,,,ans[]};
a[++cnt]=(data){cnt,x2,y2,,,ans[]};
a[++cnt]=(data){cnt,x1-,y2,,-,ans[]};
a[++cnt]=(data){cnt,x2,y1-,,-,ans[]};
}else break;
}
sort(a+,a++cnt);
CDQ(,cnt);
for(int i=;i<=ans[];i++)
printf("%d\n",ans[i]);
return ;
}
胡扯两句——CDQ分治的更多相关文章
- Hdu5126-stars(两次CDQ分治)
题意: 简化就是有两种操作,一种是插入(x,y,z)这个坐标,第二种是查询(x1,y1,z1)到(x2,y2,z2)(x1<=x2,y1<=y2,z1<=z2)的长方体包含多少个点. ...
- 【Luogu1393】动态逆序对(CDQ分治)
[Luogu1393]动态逆序对(CDQ分治) 题面 题目描述 对于给定的一段正整数序列,我们定义它的逆序对的个数为序列中ai>aj且i < j的有序对(i,j)的个数.你需要计算出一个序 ...
- cdq分治的小结
cdq分治 是一种特殊的分治 他的思想: 1.分治l,mid 2.分治mid+1,r 3.计算l,mid对mid+1,r的影响 3就是最关键的地方 这也是cdq的关键点 想到了这一步基本就可以做了 接 ...
- 【洛谷3157】[CQOI2011] 动态逆序对(CDQ分治)
点此看题面 大致题意: 给你一个从\(1\)到\(n\)的排列,问你每次删去一个元素后剩余的逆序对个数. 关于\(80\)分的树套树 为了练树套树,我找到了这道题目. 但悲剧的是,我的 线段树套\(T ...
- luogu P3157 [CQOI2011]动态逆序对(CDQ分治)
题目描述 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序 ...
- CDQ分治题目小结
CDQ分治属于比较特殊的一类分治,许多问题转化为这类分治的时候,时空方面都会有很大节省,而且写起来没有这么麻烦. 这类分治的特殊性在于分治的左右两部分的合并,作用两部分在合并的时候作用是不同的,比如, ...
- [学习笔记] CDQ分治 从感性理解到彻底晕菜
最近学了一种叫做CDQ分治的东西...用于离线处理一系列操作与查询似乎跑得很快233 CDQ的名称似乎源于金牌选手陈丹琦 概述: 对于一坨操作和询问,分成两半,单独处理左半边和处理左半边对于右半边的影 ...
- $CDQ$分治总结
A.\(CDQ\) 分治 特别基础的教程略. \(CDQ\)分治的优缺点: ( 1 )优点:代码量少,常数极小,可以降低处理维数. ( 2 )缺点:必须离线处理. \(CDQ\)分治与其他分治最本质的 ...
- BZOJ1173 CDQ分治 笔记
目录 二维数据结构->cdq 预备知识 T1: 二维树状数组 T2:cdq分治 bzoj1176 mokia:Debug心得 一类特殊的CDQ分治 附: bzoj mokia AC代码 二维数据 ...
随机推荐
- JSON学习总结
最近几天使用json的需求比较急迫,所以学习了一下json.此文仅当笔记,以防忘却. 此文主要分为js和java总结: 先介绍json格式: JSON 数据的书写格式是:名称/值对. ***:可以更容 ...
- MongoDB学习 (六):查询
本文地址:http://www.cnblogs.com/egger/archive/2013/06/14/3135847.html 欢迎转载 ,请保留此链接๑•́ ₃•̀๑! 本文将介绍操作符的使用 ...
- nodejs学习笔记<五>npm使用
NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题. 以下是几种常见使用场景: 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从NPM服务器下载并 ...
- Struts1 标签库 说明
Struts提供了五个标签库,即:HTML.Bean.Logic.Template和Nested. HTML标签 : 用来创建能够和Struts 框架和其他相应的HTML 标签交互的HTML 输入表单 ...
- 关于javascript的误区
JavaScript 误区 接触JavaScript两年多遇到过各种错误,其中有一些让人防不胜防,原来对JavaScript的误会如此之深,仅以此文总结一下常见的各种想当然的误区 String rep ...
- Hadoop与Spark比较
先看这篇文章:http://www.huochai.mobi/p/d/3967708/?share_tid=86bc0ba46c64&fmid=0 直接比较Hadoop和Spark有难度,因为 ...
- jQuery DOM
请尊重知识,请尊重原创 更多资料参考请见 http://www.cezuwang.com/listFilm?page=1&areaId=906&filmTypeId=1 jQuer ...
- OpenGL的glOrtho平行投影函数详解[转]
glortho函数可以将当前的可视空间设置为正投影空间.基参数的意义如图,如果绘制的图空间本身就是二维的,可以使gluOrtho2D.他的使用类似于glOrtho 原型是: void glOrtho( ...
- PHP开发者常犯的MySQL错误
PHP开发者常犯的MySQL错误 数据库是WEB大多数应用开发的基础.如果你是用PHP,那么大多数据库用的是MYSQL也是LAMP架构的重要部分. PHP看起来很简单,一个初学者也可以几个小时内就 ...
- Hbase之遍历获取数据
import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.hbase.HBaseConfiguration;import ...