随笔分类 -  7二分答案

摘要:首先二分一下答案,就变成了找长度>=m的 不相交的路径的个数 考虑到在一个子树中,只有一个点能出这个子树去和别的点搞 所以我这个子树里尽量自我满足是不会有坏处的 而且要在自我满足数最大的条件下,剩下一个尽量大的去把他搞出去 具体来说,我们设f[x]是x的子树中的满足条件的最大路径数,g[x]是在f[ 阅读全文
posted @ 2018-11-19 11:18 Ressed 阅读(266) 评论(0) 推荐(0)
摘要:求公共前缀的问题可以用hash+二分来解决,但这个是动态的,所以我们用平衡树来维护区间的hash值 复杂度$O(mlog^2n)$ 阅读全文
posted @ 2018-11-14 12:24 Ressed 阅读(163) 评论(0) 推荐(0)
摘要:首先如果L=1,那就可以直接用一个优先队列来做 但它并不是1 所以要换个做法 假设我们已经知道第L的数是x,第R的数是y 那其实就只需要找到[x+1,y+1]这一段,然后再加上一定数量的x和y就是答案 于是可以枚举A[i],二分B[j]找到 然后考虑怎么找第L的数是多少 其实也是二分出一个数,然后比 阅读全文
posted @ 2018-10-29 21:22 Ressed 阅读(230) 评论(0) 推荐(0)
摘要:用一个树状数组维护前缀和,每次我二分地找一个位置,使得我能一路买过去 但这个买不了 那以后肯定也都买不了了,就把它改成0,再从头二分地找下一个位置,直到这一圈我可以跑下来 然后就看跑这一圈要花多少钱、能买多少糖,拿T除一除,减一减,再去跑下一圈 每个位置只会被删一次,所以复杂度是$O(nlog^2n 阅读全文
posted @ 2018-10-27 22:23 Ressed 阅读(242) 评论(0) 推荐(0)
摘要:Bob肯定想挑一个流量最大的边,然后把所有的费用都加给它呗 那Alice就让流量最大的边尽量小呗 那就二分一下答案再dinic呗 阅读全文
posted @ 2018-10-19 14:58 Ressed 阅读(152) 评论(0) 推荐(0)
摘要:首先floyd求出来每两点间的最短距离,然后再求出来从某点买再到某点卖的最大收益 问题就变成了找到一个和的比值最大的环 所以做分数规划,二分出来那个答案r,把边权变成w[i]-r*l[i],再做spfa判正环就行了 (本来想偷懒用floyd判正环,结果T了) 阅读全文
posted @ 2018-10-13 10:33 Ressed 阅读(243) 评论(0) 推荐(0)
摘要:先二分出一个时间,把每个军队倍增往上跳到不能再跳 然后如果它能到1号点,就记下来它跳到1号点后剩余的时间;如果不能,就让它就地扎根,记一记它覆盖了哪些叶节点(我在这里用了dfs序+差分,其实直接dfs就行..) 然后对于那些叶节点没有被覆盖完全的(父亲为1号点的)子树,肯定需要一些已经到1号点的军队 阅读全文
posted @ 2018-10-01 20:09 Ressed 阅读(162) 评论(0) 推荐(0)
摘要:先二分一个答案x,然后通过差分来看有没有不满足的 阅读全文
posted @ 2018-10-01 19:58 Ressed 阅读(199) 评论(0) 推荐(0)
摘要:先二分出一个x,我们要算使最近的跳跃距离>=x的最少移除数量是否<=M就可以了 然后就别dp了...贪心就完事了...我肯定能不移就不移比较好... 阅读全文
posted @ 2018-09-25 21:42 Ressed 阅读(210) 评论(0) 推荐(0)
摘要:我们先不会就二分一下答案,设它是x,我们要判断它能不能满足 为了满足这个答案,我们就要让原本路径长度大于x的所有路径都经过某条边,而且这条边还要大于等于最长的路径-x 于是运用树上差分的思想,对于所有长度>x的路径,给他的两端点处++,lca处--,这样统计树上每个点的子树的和,就是这个点与它父节点 阅读全文
posted @ 2018-09-25 21:29 Ressed 阅读(183) 评论(0) 推荐(0)
摘要:离散化一下然后把姓名串和询问串都放一起做SA 和bzoj3277串类似地,满足某一询问的后缀(就是和这个询问对应的后缀的LCP>=这个询问长度的后缀)的排名也是一个区间,把这个区间二分出来即可 现在要做的两个问题就变成了: 给定一些区间、一些点,每个点有对应的颜色(就是sa[i]对应的那个姓名串对应 阅读全文
posted @ 2018-09-20 16:54 Ressed 阅读(194) 评论(0) 推荐(0)
摘要:常见操作:先把所有串都连到一起,但中间加上一个特殊的符号(不能在原串中/出现过)作为分割 由于全部的子串就等于所有后缀的所有前缀,那我们对于每一个后缀,去求一个最长的前缀,来满足这个前缀在至少K个原串中出现过 那我们就二分一下这个前缀的长度。现在的问题就是怎么判断这个前缀是否在K个串中出现过了。 显 阅读全文
posted @ 2018-09-19 21:43 Ressed 阅读(491) 评论(0) 推荐(0)
摘要:https://www.vijos.org/d/SUOI/p/59dc5af7d3d8a1361ae62b97 二分一个答案,然后做一做前缀和,用满足区间大小的最小值减一减,判断答案合不合法 然而还要输出一个最小的区间 太毒瘤了 但其实最后答案中最小区间的端点就只能是刚才做的那个最小值,因为如果不是 阅读全文
posted @ 2018-09-13 23:02 Ressed 阅读(242) 评论(0) 推荐(0)
摘要:二分一下答案,假设是x。 我们把大于x的看成1,小于x的看成-1,等于x的看成0 那某个区间的和如果是正的,就说明这个区间中位数大于x;如果是0,就等于x;如果是负的,就小于x; 这样的话,做一个前缀和,然后维护一下满足长度>=len的最小值,然后减一减,看看是不是>=0就可以了。 (我自己写的话我 阅读全文
posted @ 2018-09-10 22:17 Ressed 阅读(291) 评论(0) 推荐(0)
摘要:首先二分一个答案x,然后我们把>=x的数看成1,<x的数看成0,那如果最后剩下1,这个答案就是合法的。 那我们就来算让某一位得1至少需要填几个1(设这个值是f[i]) i=1..n时,显然,如果i已经固定,f[i]=0或inf(取决于原来是1还是0);如果i还没有固定,那f[i]=1 然后每次就可以 阅读全文
posted @ 2018-09-10 22:12 Ressed 阅读(702) 评论(6) 推荐(6)
摘要:就是01分数规划的思路,只不过当把w[i]-r*t[i]>0的选完以后如果w值还没达到要求,那就再01背包dp一下就好了(dp时w值>W的时候就存在W里就不会爆内存了)。 (跑得很慢..大概是二分的姿势有问题...) (貌似还有直接dp的做法?不会) 阅读全文
posted @ 2018-09-03 22:16 Ressed 阅读(220) 评论(0) 推荐(0)
摘要:二分答案建图,然后判环,就可以了。 字典序输出的话,只要做拓扑序的时候用优先队列来维护就可以了。 (其实判环也可以用拓扑序...) 阅读全文
posted @ 2018-09-03 21:38 Ressed 阅读(177) 评论(0) 推荐(0)