
二分
文章平均质量分 76
二分查找
ez_lcw
这个作者很懒,什么都没留下…
展开
-
【XSY3633】匹配(树形 DP,树链剖分,分治)
考虑最普通的 DP:设 fu,i,0/1f_{u,i,0/1}fu,i,0/1 表示 uuu 子树内恰好包含 iii 条边的最大权匹配,其中 uuu 有无被匹配。这是个树上背包,暴力 DP 是 O(n2)O(n^2)O(n2) 的。可以发现 fu,i,jf_{u,i,j}fu,i,j 关于 iii 是一个凸函数(从费用流的角度分析),这告诉我们合并两棵子树的 DP 数组的时候(hi=maxj(fj+gi−j)h_i=\max_j (f_j+g_{i-j})hi=maxj(fj+gi−j))原创 2022-02-19 22:51:08 · 660 阅读 · 0 评论 -
【CF802O】April Fools‘ Problem (hard)(wqs二分,模拟费用流,老鼠进洞)
如果没有恰好为 kkk 的限制的话是个老鼠进洞的经典模型。加上恰好为 kkk 的限制后考虑使用 wqs 二分,因为费用流每次增广出来的费用是单调不降的。即如果设 g(k)g(k)g(k) 表示总流量恰好为 kkk 的最小花费,那么必有 g(k)−g(k−1)≤g(k+1)−g(k)g(k)-g(k-1)\le g(k+1)-g(k)g(k)−g(k−1)≤g(k+1)−g(k),且 (k,g(k))(k,g(k))(k,g(k)) 这些点构成一个凸壳。wqs 二分的大概思路是:首先要求在没有 kkk 的原创 2021-12-16 11:48:55 · 463 阅读 · 0 评论 -
【XSY3312】路径(path)(trick)
原题就不说了,记录一下其中要用的一个 trick。定理:对于一个 1∼n1\sim n1∼n 的随机排列,它的前缀最大值的期望个数为 O(logn)O(\log n)O(logn)。证明:考虑元素 xxx 作为前缀最大值的概率,这要求 x+1,⋯ ,nx+1,\cdots,nx+1,⋯,n 都在 xxx 后面出现,即在排列中抽出 x,x+1,⋯ ,nx,x+1,\cdots,nx,x+1,⋯,n 这几个数,其中 xxx 排在第一个的概率,为 1n−x+1\frac{1}{n-x+1}n−x+11。那原创 2021-12-09 14:33:28 · 541 阅读 · 0 评论 -
【XSY4231】人赢(图论,Hall定理,Trie树,树形DP)
首先二分答案,设为 midmidmid。现在的问题是:若 ai⊕aj≥mida_i\oplus a_j\geq midai⊕aj≥mid,则 i,ji,ji,j 之间有一条连边,判断是否存在一种选边方式使得每个点都恰好在一个简单环上(可以是自环或二元环)。这个判定条件有点奇怪,一开始感觉有些性质,考场上除了想到只能是奇环或二元环就没想到啥了……结果是一个妙妙转化,简单环可以看成置换,那么现在问题就变成了:是否存在一个 1∼n1\sim n1∼n 的排列 ppp,使得 ∀i,ai⊕api≥mid\f原创 2021-11-17 08:44:36 · 109 阅读 · 0 评论 -
【XSY3434】【UOJ431】time map(线段树维护位运算)
首先注意到一个性质:如果我们把权值相同且相邻的点归为一个连通块的话,那么一个叶子节点往上会经过至多 O(logV)O(\log V)O(logV) 个连通块(因为父亲节点一定是儿子节点的子集)。又注意到属于同一个连通块内的点,走的方向都是一样的。那么如果我们能动态维护点的权值,询问从某个点开始走时,假设它会往左走(那么在它所属的连通块内它就一直会往左走),那么我们可以二分出它往左走一直会走到哪(显然这段路上每个点的权值都是相同的,也就是说我们只需要算出这段路的长度即可知道这段路对答案的贡献),然后再跳原创 2021-10-14 08:17:47 · 179 阅读 · 0 评论 -
【XSY2698】挑选子序列(二分,DLX)
题面挑选子序列题解非常 NOI 的一道题(给出很多奇奇怪怪的定义)。先二分答案为 midmidmid,那么我们只需判定:是否存在子序列 seqseqseq 使得串 s1,s2s1,s2s1,s2 与 ttt 的距离不超过 midmidmid,即串 s1,s2s1,s2s1,s2 各位置与 ttt 的距离不超过 midmidmid,那么对于串 s1,s2s1,s2s1,s2 的每个位置 iii,seqseqseq 中都应该存在一个位置 jjj 使得 i,ji,ji,j 的距离小于等于 midmidmi原创 2021-08-20 09:11:25 · 420 阅读 · 0 评论 -
【XSY2501】Mountainous landscape(线段树二分,凸包)
先考虑如何确定对于某个 iii 的答案。题目的要求是:对于每一个 i=1,2,⋯ ,n−1i=1,2,\cdots,n-1i=1,2,⋯,n−1,找一个最小的 jjj 使得 j>ij>ij>i 且线段 PjPj+1P_jP_{j+1}PjPj+1(含端点)与将射线 PiPi+1P_iP_{i+1}PiPi+1 略向上平移后所得的射线相交。这个要求可以转化为:拟一条射线 PiPi+1P_iP_{i+1}PiPi+1,找到最小的 jjj 使得 PjP_jPj 在这条射线上方(原创 2021-08-06 20:03:28 · 157 阅读 · 0 评论 -
【XSY3979】数据结构(分治,剪枝)
题面数据结构题解挺神奇的一道题。正解是对 yyy 坐标分治。每次考虑 yyy 坐标在 [l,mid][l,mid][l,mid] 范围内的红点和 yyy 坐标在 [mid+1,r][mid+1,r][mid+1,r] 范围内的蓝点匹配成点对的贡献。考场上尝试过这种做法,但发现时间复杂度不对劲就弃掉了。但有一种极妙的剪枝方法,它结合了题目特殊的询问条件,得出并依靠了下面的这条结论:只有选择的红点为 yyy 坐标在 [l,mid][l,mid][l,mid] 范围内权值最大的那个红点、或者选择的原创 2021-03-26 16:15:12 · 171 阅读 · 0 评论 -
【XSY3890】【hdu5263】平衡大师(二分,上下界网络流)
不妨令 k=m−kk=m-kk=m−k,那么题目的意思就是至多删去 kkk 条边。首先二分答案 ttt,然后求最少需要删去多少的边,如果最少需要删去的边 ≤k\leq k≤k 则合法。在原图中统计每一个点的入度-出度,记为 dud_udu。首先对于每一条边 (u,v)(u,v)(u,v),从 uuu 向 vvv 连边 ([0,1],1)\big([0,1],1\big)([0,1],1)(小括号内前一位表示容量上下界,后一位表示费用),表示删去这条边需要耗费 111。对于每一个点 uuu,分三种情原创 2021-02-08 10:26:40 · 150 阅读 · 0 评论 -
【XSY3812】鱼死网破(计算几何?)
题面题解先对于每个 xxx 轴上方的点,找到所有墙,按照极角排序,合并重合的墙。对于每一个端点引一条射线,左端点的射线权值是 +1+1+1,右端点是 −1-1−1,可以发现一个点不能看到的点数等于这个点左边的射线的权值和。观察到这些直线都经过至少一个墙的端点,可以将这些直线按照经过的端点分类,每一类内极角排序。然后查询的时候对于每一堵墙二分查询就好了。时间复杂度 O(k(n+m)logn)O(k(n+m)\log n)O(k(n+m)logn)。代码如下:#include<bits原创 2021-01-12 13:36:56 · 172 阅读 · 0 评论 -
UVA12003 Array Transformer(分块,块内二分)
我们考虑用分块来水过此题我们先将原序列进行分块,对于某个块 BBB 内的数,我们把它们放进一个数组 block[B][ ]block[B][\ ]block[B][ ] 里,再对数组进行排序。那么我们就得到了 n\sqrt{n}n 个有序数组 block[ ][ ]block[\ ][\ ]block[ ][ ]。然后对于修改操作,...原创 2020-01-17 14:18:42 · 178 阅读 · 0 评论 -
【loj2073】「JSOI2016」扭动的回文串(manacher+二分+双哈希)
manachermanachermanacher+二分+双哈希看见标题就不想做的童鞋可以看下面,让你更绝望。这题思路比较简单明了,我们就按照题目说的那样,设串TTT为答案,分两种情况讨论:当TTT是AAA串或BBB串中的一个回文串时,我们可以直接用manachermanachermanacher求得答案。当TTT是某一个回文的扭动字符串S(i,j,k)S(i,j,k)S(i,j,k...原创 2019-08-14 21:57:12 · 247 阅读 · 0 评论