--------------分治--------------
alpc_qleonardo
这个作者很懒,什么都没留下…
展开
-
CodeForces - 1073G Yet Another LCP Problem(后缀数组 + 单调栈 / 分治)
大致题意给你一个字符串SSS,然后有qqq个询问。对于第iii个询问,给出两个数字kik_iki和lil_ili序列a1,a2,...,akia_1,a_2,...,a_{k_i}a1,a2,...,aki和b1,b2,...,blib_1,b_2,...,b_{l_i}b1,b2,...,bli,让你求∑i=1i=k∑j=1j=lLCP(s[ai…n],s[bj…n]...原创 2019-12-03 20:05:11 · 548 阅读 · 0 评论 -
HDU 5875 Function (取模+分治+线段树)
非常有意思的一道题目。 通过函数的关系式,很容易推出f(l,r)=a[l]%a[l+1]%...%a[r]。显然,对于l左边比a[l]大的数字取模并没有什么意义,所以我们只需要对比a[l]小的数字取模。进一步发现,随着取模的进行,又可以去掉很多点。即a[l]%第一个比a[l]小的数字=c,c%第一个比c小的数字……可以证明,一个数字取模到不能取模(等于0),最多进行logN次运算。下面给出证明:数字N,假设对a(N/2<a<N)取模,得到的结果为N-a,小于N/2;假设对a(a<N/2)取模原创 2017-07-21 21:32:34 · 348 阅读 · 0 评论 -
BZOJ 1492 货币兑换Cash(CDQ分治+斜率优化dp)
之前已经用斜率优化dp+平衡树维护凸点把这题给解决了,但是呢,这题的故事并没有结束。 首先膜拜CDQ陈丹琦大神Orz……昨天突然得知,其父亲是NUDT数学系的教授……与大神之间的距离居然如此之近。还是上论文:从《Cash》谈一类分治算法的应用 显然,用平衡树维护凸点的做法是可以的,但是在比赛中splay却是非常的不好写,编程复杂度极其的高。...原创 2017-12-01 21:40:45 · 654 阅读 · 0 评论 -
BZOJ 3110 [Zjoi2013]K大数查询(整体二分+树状数组)
其实呢,这题和之前写过的那个动态区间第K大很类似,只不过那个是修改,而这个是插入,但是同样都可以用线段树套Treap来实现。但是今天要说的是另外一种更加巧妙的分治方法,使得编程复杂度大幅下降——整体二分。 首先,我们知道,如果仅仅只是询问区间第K大,我们用的是二分答案。具体做法是二分一个数字,然后看区间内有多少个数字比他大,如果恰好有K-1个,那么枚举到的这个数字就是区间第K大。对于这道题目,我们同样也可以运用这种思想,只不过我们还要把这个所有的操作也和这个二分答案的过程一起做,所以顾名思义原创 2017-12-03 11:01:23 · 546 阅读 · 0 评论 -
POJ 1741 Tree(树分治+容斥原理+树的重心)
一些很神奇的算法杂合在一起的题目。 大致题意:给你一个带边权的树,问你总共有多少对点距离在K以内,这里定义点对是无序的,即(a,b)和(b,a)算是同一对。 其实呢,之前我在做HDU多校赛的一些题目的时候遇到过类似的树上统计的问题,其实这类做法有一个通用的名称——树分治。就是统计树上的东西,我们可以根据树的结构分治,对于一个节点,我可以把它的每个儿子分开治,把儿子当作单独的一个问题处理,然后最后合起来,再去除一些重复的东西即可。这题也正是这么做的。 首先,我们原创 2017-12-04 11:59:47 · 374 阅读 · 0 评论 -
NEU 1704 三维偏序(CDQ分治+树状数组)
经典的三维偏序问题,cdq分治同样也是经典的做法。 不考虑这种方法的话,我们可以先对所有的数字按照x坐标排序,然后按顺序把另外两个坐标添加进二维树状数组里面,每次查询它前面的数字个数即可。然而这里总共有100000个数字,开二维树状数组即使在离散化的情况下,也会爆内存,于是貌似只能用CDQ分治。 首先当然的,对x进行排序,然后为了分治的方便,就直接把x坐标离散化。然后直接进入分治,由于这题的cdq分治在单位区间的时候不需要进行什么修改,所以我们大可以先分治两个小部分,再处理大原创 2017-12-02 19:46:58 · 574 阅读 · 0 评论 -
CodeForces 848C Goodbye Souvenir(CDQ分治+平衡树/set+树状数组)
再度加深对CDQ分治的理解。大致题意:给你一个数字序列,然后有两种操作。一是修改,把某个位置的数字改成另外一个数字;二是求一个区间[l,r]中所有同类数字的最大跨度和,即如样例所示。 首先,对于这个同类数字中的最大跨度和,对于每一个数字可以按照套路,分成所有前后相邻两个同类数字的距离和。即1、2、1、3、1、2、3对于数字1的最大跨度,我们可以写成(3-1)+(5-3)=4,也样子相当于只需要维护前后两个相邻的数字即可。然后,我们考虑如何对于每个数字维护这个前后关系,支持删除然后又支持修改,原创 2017-12-14 20:46:56 · 452 阅读 · 0 评论 -
CodeForces 1045G AI robots(CDQ分治 + 树状数组 + 单调队列)
大致题意:有很多个机器人,他们要相互交流有一些限制条件。首先是,两个人要相互能够能够看到;其次,两个人的智商的差不超过K。现在给出每个机器人的视力范围和他们的智商,现在问你总共有多少对机器人能够相互交流。首先来看下总共有多少个限制条件。由于是要求双方都能够看到,所以显然是要按照视野半径去排序的。然后要求两个人的智商差要在一定的范围内的,所以也要按照智商去排序。另外还要跟自己的位...原创 2018-10-21 15:16:45 · 423 阅读 · 0 评论