Daycdq分治相关PPT课件.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《Daycdq分治相关PPT课件.pptx》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Daycdq 分治 相关 PPT 课件
- 资源描述:
-
1、专题讨论:分治方法专题讨论:分治方法AC_AerolightAC_Aerolight2013.4.282013.4.29 Fuzhou2013.4.282013.4.29 Fuzhou2022-5-211 1PREFACE今天首先讨论的是一种特殊的分治方法,在OI界初见于陈丹琦2008年的集训队作业中,因此也被称为CDQ分治。随后将讨论一些利用了分治思想的其他算法。这节课的目的是科普,因此题目会较简单,讲解也会比较详细。如果对该算法或对特定问题已有深入了解可以跳过不听,但不要打扰其他同学。Lets begin.2022-5-212 2PREFACE先看几个常见的递归复杂度分析。T(n)=2T(
2、n/2)+O(kn)的解是T(n)=O(kn log n)Master TheoremT(n)=2T(n/2)+O(kn log n)的解是T(n)=O(kn log2 n)T(n)=2T(n/2)+O(k)的解是T(n)=O(kn)一棵N个节点的线段树上有几个节点?K是一个和N无关的多项式2022-5-213 3INTRO:归并排序给定排列P,求排列的逆序对数量。P的长度=100000。要求O(nlogn)定义归并排序过程Merge(l,r)Merge(l,r)Merge(l,mid)Merge(mid+1,r)Count(l,mid,mid+1,r)只需要考虑左右两段之间造成的逆序对,段内
3、的逆序对由递归解决2022-5-214 4NOI2007 CASH有两种金券,金券按比例交易:买入时,将投入的资金,购买比例为Ratei的两种金券;卖出时,卖出持有的一定比例的金券。已知未来n天两种的金券价格Ai、Bi,初始资金为s,求最大获利。为使获利最大,交易时显然应该全部买进或卖出。1=n-bi/ai上面这个式子的左边,一般记成slope(j,k)2022-5-216 6NOI2007 CASHSlope(j,k) -bi/ai令Gi = ratei*fi,在二维平面上定义点Xi=(Fi,Gi)Slope(j,k)就是通过Xj和Xk的斜率维护一个点集X,支持以下两个操作:1)在第一象限的
4、任意位置插入一个点2)给定负数斜率K,求所有斜率为K且过点集中任意点的直线在Y轴上的最大截距操作2最终用到的点都会在点集的上凸壳上维护点集X的凸包,支持动态插入和斜率查询平衡树结构 O(nlogn)2022-5-217 7NOI2007 CASH算法存在的问题边界情况众多难写难调观察操作2中,提供的斜率值是-bi/ai,可以预处理得到而和F的取值无关这意味着在插入节点Xi时,已经可以确认它对询问j(ji)带来的影响引入分治思想2022-5-218 8NOI2007 CASH定义过程Solve(L,R)假设运行Solve(l,r)可以得到Fl到Fr的值。L,mid区间里的询问,可以直接递归Sol
5、ve(l,mid)解决。mid+1,r区间里的询问K,会受到mid+1,k这些点的影响,以及l,mid的影响。前半部分可以递归解决。Solve(l,r)递归调用Solve(l,mid)整体考虑l,mid间的点对mid+1,r间询问的影响。递归调用Solve(mid+1,r)2022-5-219 9NOI2007 CASH整体考虑l,mid对mid+1,r的影响给定点集X和一系列询问每个询问是一个负数斜率回答所有斜率符合且通过点集X中任意点的直线中,Y轴的最大截距是多少只要考虑点集X的上凸包。对于每个询问,在凸包上二分即可。这一步的复杂度是O(nlogn),这里n=r-l。2022-5-2110
6、10NOI2007 CASH时间复杂度?Solve(l,r)的复杂度是O(nlogn)T(n)=2T(n/2)+O(nlogn)T(n)=O(nlog2n)离最优化还有距离。需要log n的地方1) 求点集凸包2) 二分答案2022-5-211111NOI2007 CASH1) 点集凸壳合并两个凸壳的时间复杂度是O(n+m)Solve(l,r)结束后返回Xl.Xr的凸壳单步O(n),总体O(n log n)2) 二分答案放弃二分,离线处理把点集凸壳和所有询问排序,用两个指针扫描2) 对询问排序提前对询问进行一次归并排序,存储所有中间结果为什么不能在Solve()时进行归并?预处理复杂度O(nl
7、ogn),主递归中单步O(n)T(n)=2T(n/2)+O(n),T(n)=O(nlogn)2022-5-211212NOI2007 CASHSolve(l,r)是递归函数如何消除递归?手工栈模拟递归存储中间过程?T(n)的解不变,但常数减小。总结1) 分治思想-只考虑跨立作用2) 段内影响忽略不计-问题离线化2022-5-211313WF2011 MACHINE WORKS你的公司获得了一个厂房N天的使用权和一笔启动资金,你打算在这N天里租借机器进行生产来获得收益。可以租借的机器有M台。每台机器有四个参数D,P,R,G。你可以在第D天花费P的费用(当然,前提是你有至少P元)租借这台机器,从第
8、D+1天起,操作机器将为你产生每天G的收益。在你不再需要机器时,可以将机器卖掉,一次性获得R的收益。厂房里只能停留一台机器。厂房里只能停留一台机器。不能在购买和卖出机器的那天操作机器,但是可以在同一天卖掉一台机器再买入一台。在第N+1天,你必须卖掉手上的机器。求第N+1天后能获得的最大资金。2022-5-211414WF2011 MACHINE WORKS数据范围租借天数D=109初始资金C=109机器数N=105对于每个机器:租借日Di=D买入价Pi和卖出价Ri满足1=RiPi=109每日收益Gi满足1=GiPj。O(n2)2022-5-211616WF2011 MACHINE WORKSF
9、i = Max (Fi-1, Fj-Pj+Rj+Gj*(Di-Dj-1)FjPj令Aj=Fj-Pj+Rj-Gj*Dj-Gj那么Fi = Max(Fi-1,Aj+Gj*Di)和上一题一样了。注意到斜率Di是不变的,因此可以对整个F1,Fn进行分治。复杂度O(nlogn),和平衡树维护凸壳同阶2022-5-211717WF2011 MACHINE WORKSFi = Max(Fi-1,Aj+Gj*Di)在平面上有若干直线y=Gj*x+Aj维护一个直线集,支持以下两类操作插入一次函数y=kx+b给定询问D,求所有函数在x=d上的最大值维护一系列半平面交对偶问题?2022-5-211818BOI200
10、7 MOKIA有一个2000000*2000000的棋盘,每个格子上有一个数字Ax,y,现在要执行两类操作:Add x y a:Ax,y += aQuery x0 y0 x1 y1:询问矩阵(x0,y0)-(x1,y1)内所有格子的数字和。Add操作数=160000 Query操作数=100002022-5-211919BOI2007 MOKIA棋盘大小和询问数相差巨大,所以肯定要离散化。二维线段树维护?MLE+TLE二维树状数组+Hash?Hash常数过大空间怎么开?2022-5-212020BOI2007 MOKIA和之前的想法类似,定义操作Solve(L,R)Solve(L,R)应当能够
11、处理L,R之间的所有操作Solve(L,R)Solve(l,mid)处理l,mid中操作对mid+1,r中操作的影响Solve(mid+1,r)如何处理?2022-5-212121BOI2007 MOKIA前半部分的Add对后半部分的Query造成的影响给定带权点集P=(Xi,Yi),Q个询问(x0,y0,x1,y1),对于每个询问,输出在对应矩形内的点权之和。在列上对询问进行差分,将一个询问拆成2个所有点和询问按Y排序,线段树维护在两维上对询问进行差分,将一个询问拆成4个所有点和询问按Y排序,树状数组维护T(n)=2T(n/2)+O(nlogn)T(n)=O(nlog2n)2022-5-21
12、2222VIOLET 3天使玩偶维护二维点集P,支持以下两个操作(1)插入点(x,y)(2)给定询问(x,y),求点集中离询问点最近的点距离定义为曼哈顿距离Dis(P1,P2)=|x1-x2|+|y1-y2|N,m=300000X,y=1000000k-d树能不能做2022-5-212323VIOLET 3天使玩偶去除Dis(P1,P2)的绝对值符号分4种情况讨论:左上,左下,右上,右下只需要考虑一种情况(答案在询问的左下)维护点集P,支持以下操作(1)将(x,y)插入点集(2)给定询问(x,y),求满足dis(p1,p2)=(x-x)+(y-y)=x+y-(x+y)最小的点问题转为求x+y最
13、大的点没有操作1的情况对x排序,对y维护树状数组2022-5-212424VIOLET 3天使玩偶定义操作Solve(l,r),处理l,r之间的询问Solve(l,r)Solve(l,mid)考虑l,mid中的点对mid+1,r中询问的影响Solve(mid+1,r)给定带权点集P(x,y),权值为x+y,给出Q个询问(x,y),查找x=x,yPj & QiQj,称I比J有能力现在要求出最长的一个序列A=(A1,A2,At),满足Ai比Ai+1有能力N=100000。为了简单起见,P和Q都是1到N的排列。把人按照Pi排序,问题变为求序列Qi的LISFi = Max(Fj | ji & QjPj
14、 & QiQj & RiRj,称I比J有能力现在要求出最长的一个序列A=(A1,A2,At),满足Ai比Ai+1有能力N=40000。为了简单起见,P,Q,R都是1到n的排列2022-5-2127273D PARTIAL ORDER首先可以按照Pi把人排个序。现在要求的是满足ij,QiQj,RiRj的最长序列。用Fi表示以第i个人结尾的最长序列Fi = MaxFj | ji,QjQi,RjRi +1怎么搞?线段树套平衡树/可持久化线段树O(nlog2n)2022-5-2128283D PARTIAL ORDER尝试在这个问题上进行分治。定义过程Solve(l,r),能够得到Fl.Fr的值Sol
15、ve(l,r)Solve(l,mid)处理l,mid中元素对mid+1,r中Fx取值的影响Solve(mid+1,r)Fx = MaxFj | jx,QjQx,RjRx +11) x在l,mid中:集体处理2) x在mid+1,r中:由递归解决 2022-5-2129293D PARTIAL ORDER处理l,mid中元素对mid+1,r中Fx取值的影响维护带权点集X=(Qi,Ri) (l=i=mid),权值Fi支持询问:给定点(Qj,Rj) (mid+1=j=r)在点集X中寻找一个点(Qi,Ri)使得QiQj且RiPj & QiQj & RiRj & SiSj,称I比J有能力对每一个人,输出
16、任意一个比他有能力的人编号,或声明没有人比他有能力。N=40000简单起见,P,Q,R,S都是1-n的排列。树套树套树?怎么写树套树?2022-5-213232SIMPLIFIED 4D PARTIAL ORDER首先把元素按Pi排序。对每个i,要判断是否有一个j满足ji,QjQi,RjRi,SjSi.条件太多了,不好做。问题等价于Min(Sj|ji,QjQi,RjRi) Si求Min(Sj | ji,QjQi,RjRi)回忆上一题Fi = MaxFj | ji,QjQi,RjPj & QiQj & RiRj & SiSj,称I比J有能力现在要求出最长的一个序列A=(A1,A2,At),满足A
17、i比Ai+1有能力N=20000树套树套树?树套树?2022-5-2134344D PARTIAL ORDER将元素按照Pi排序。用Fi表示以第i个人结尾的最长序列Fi = MaxFj | ji,QjQi,RjRi,SjTLE+MLEHash动态节点,三维树状数组-?我们尝试一下分治。2022-5-2135354D PARTIAL ORDER定义Solve(l,r),解决Fl到Fr的问题。Solve(l,mid)考虑l,mid中的点对mid+1,r中F取值的影响Solve(mid+1,r)整体考虑给定带权点集X=(Qi,Ri,Si) l=i=mid,权值Fi给定(r-mid)个询问(Qj,Rj
18、,Sj) mid+1=j=r对于每个询问,回答点集中满足QiQj,RiRj,SiSj的最大权值。离线操作按Qi排序。询问满足RiRj,SiSj的点的最大权值2022-5-2136364D PARTIAL ORDER询问满足RiRj,SiSj的最大权值线段树套平衡树?树状数组套平衡树?再分治一次定义分治过程Solve2(l,r),用于处理Solve(l,r)中l,mid中的点对mid+1,r中F值的影响。Solve2(l,r)Solve2(l,mid)处理(l,mid)中点对(mid+1,r)中询问的影响Solve2(mid+1,r)和Solve(l,r)有什么区别?2022-5-2137374
展开阅读全文