CDQ分治_占坑】的更多相关文章

准备系统地学习一波CDQ分治,持续更新中... 首先,CDQ分治也还是分治的一种,只不过普通分治是独立的解决两个子问题,而CDQ分治还要计算第一个子问题对于第二个的影响. CDQ分治几乎都是用来解决多维偏序对的问题. 使用CDQ分治的前提条件: 修改操作对询问的贡献独立,修改操作互不影响效果 题目允许使用离线算法. 可以用CDQ解决的经典问题: 例题1:BZOJ 3262 陌上花开 对第一位x排序,然后仅需求(y, z)的顺序对,用树状数组维护即可. 例题2:BZOJ 2683 N*N(N≤1e…
因为我对CDQ分治理解不深,所以这篇博客只是我现在的浅显理解有任何不对的,希望大佬指出. 首先就是CDQ分治适用的题型: (1)带修改,但修改互相独立 (2)必须允许离线 (3)解决数据结构的题,能把在线的数据结构吊打 CDQ分治更多的是一种思想,所以就更加没有模板了,只有一个大体的构造在那里. 下面就说一下CDQ分治的基本思想(我的认为): CDQ分治本质上就是按时间分治,即把各个操作按时间排序然后进行处理. 其实把这个思想说出来真的不好弄,就看一道经典例题来观察一下什么是CDQ分治 题目描述…
[BZOJ 1176:单点修改,查询子矩阵和]: 1176: [Balkan2007]Mokia Time Limit: 30 Sec  Memory Limit: 162 MBSubmit: 2005  Solved: 894[Submit][Status][Discuss] Description 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=160000,询问数Q<=10000,W<=2000000. Input 第一行两…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1492   [题意] 有AB两种货币,每天可以可以付IPi元,买到A券和B券,且A:B=Ratei,也可以卖掉OPi%的A券和B券,每天AB价值为Ai和Bi. 开始有S元,n天后手中不能有AB券,问最大获益. [思路] 设f[i]表示前i天的最大收益. 第j天将手中的钱全部换掉,可以换成的B券数目Y(j):f[j]*(1/(Rate[j]*A[j]+B[j])) 第j天将手中的钱全部换…
[题目链接] http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=29234 [题意] 询问当前点与已知点的最小曼哈顿距离. [思路] CDQ分治 Dist(A,B)=|A.x-B.x|+|A.y-B.y|.假设B处于A点的左下方,则有dist=(A.x+A.y)-(B.x+B.y),然后发现这个就与刚做过的 Mokia 比较相似,只不过是求和变成了求取最大罢了,依然可以对x用cdq分治使升序,对y用树状数组维护统计. 再考虑其…
Description 有n朵花,每朵花有三个属性:花形(s).颜色(c).气味(m),又三个整数表示.现要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量.定义一朵花A比另一朵花B要美丽,当且仅当Sa>=Sb,Ca>=Cb,Ma>=Mb.显然,两朵花可能有同样的属性.需要统计出评出每个等级的花的数量. Input 第一行为N,K (1 <= N <= 100,000, 1 <= K <= 200,000 ), 分别表示花的数量和最大属性值. 以下N行,每…
BZOJ2683: 简单题(CDQ分治 + 树状数组) 题意: 你有一个\(N*N\)的棋盘,每个格子内有一个整数,初始时的时候全部为\(0\),现在需要维护两种操作: 命令 参数限制 内容 \(1\ x\ y\ A\) \(1\le x,y \le N\),A是正整数 将格子\(x,y\)里的数字加上\(A\) \(2\ x1\ y1\ x2\ y2\) \(1\le x1\le x2\le N,1\le y1\le y2\le N\) 输出\(x1\ y1\ x2\ y2\)这个矩形内的数字…
CDQ分治 1.三维偏序问题:三维偏序(陌上花开) #include<bits/stdc++.h> #define RG register #define IL inline #define _ 200005 using namespace std; IL int gi(){ RG int data = 0 , m = 1; RG char ch = 0; while(ch != '-' && (ch<'0'||ch>'9'))ch = getchar(); if(…
CDQ分治2 CDQ套CDQ:四维偏序问题 题目来源:COGS 2479 偏序 #define LEFT 0 #define RIGHT 1 struct Node{int a,b,c,d,bg;}; Node q[_],tmp1[_],tmp2[_]; int aa,bb,cc,dd,n; long long Ans; void cdq2(RG int L,RG int R){ if(L == R)return; RG int mid = (L+R)>>1; cdq2(L,mid); cdq…
洛谷 Codeforces 这题我写了四种做法-- 思路 不管做法怎样,思路都是一样的. 好吧,其实不一样,有细微的差别. 第一种 考虑位置\(x\)对区间\([l,r]\)有\(\pm x\)的贡献当且仅当\(pre_x\!\!<\!l \;or\;nxt_x\!\!>\!r\),其中\(pre,nxt\)表示与\(x\)同种颜色的前驱后继. 那么题目就转化为二维数点了:一维是位置,一维是前驱/后继,权值是\(\pm​\)位置. 第二种 考虑最后的减去开始的等价于每一位减去前面的. 即位置\…