二分
Icefox_zhx
这个作者很懒,什么都没留下…
展开
-
CF835E The penguin's game(异或性质+二分查找)
题目大意:有n个数,其中有且只有两个数为y,其他的都为x,让你找到这两个为y的位置pos1,pos2。你可以问20个问题,每个问题为你给出一个集合,系统回馈给你他们的异或和。首先,每个集合中要不只有1个y,要不有0或2个y。我们通过问一个问题就可以知道这个集合中y的个数是奇数还是偶数。分以下四种情况: 1、集合大小为偶数,y有偶数个,则x有偶数个,那么返回值为0 2、集合大小为偶数,y有奇数个,原创 2017-08-01 18:10:57 · 840 阅读 · 0 评论 -
bzoj4012 [HNOI2015]开店(动态点分治+二分+STL/树链剖分+主席树)
如何求所有点到一个点的距离和呢?类似bzoj3924我们的处理方法。 对于每个节点x维护 s1[x]–x的子树中的点到x的距离 s2[x]–x的子树中的点到fa[x]的距离 然后logn的在重心树上跳一跳,减去重复的,补上少的即可。 这题还有一个年龄的限制,怎么办呢?很容易想到线段树,但是我不会写gg 我们还可以利用vector+二分来做。 把所有点按年龄从小到大排序,做前缀和。每次...原创 2018-02-23 23:42:18 · 351 阅读 · 0 评论 -
Codeforces Round#470
CF948A Protect Sheep(模拟)没看到输出“Yes”卡了二十分钟【再见】CF923A Primal Sport(线性素数筛,数学)CF923B Producing Snow(树状数组+二分/平衡树)CF923C Perfect Security(贪心+Trie)CF923D Picking Strings(手玩题)原创 2018-03-11 12:35:18 · 386 阅读 · 0 评论 -
bzoj4411 [Usaco2016 Feb]Load balancing(线段树+二分+贪心)
首先我们枚举横着一刀切在哪,然后考虑此时竖着一刀切在哪里最好。我们令横线上方的点记为0,下方的点记为1,竖线左边的点记为l,右边的点记为r,则随着竖线的右移,显然有max(l0,l1)max(l0,l1)max(l_0,l_1)逐渐变大,max(r0,r1)max(r0,r1)max(r_0,r_1)逐渐变小。 记ans=max(max(l0,l1),max(r0,r1))ans=max(max...原创 2018-04-12 22:37:09 · 367 阅读 · 0 评论 -
bzoj3572 [Hnoi2014]世界树(虚树+树形dp+倍增+二分)
首先我们还是针对每一次询问建出虚树。在虚树上搞事情,这样复杂度就只与关键点个数有关了。我们考虑一棵虚树怎么统计答案。我们首先两遍dfs求出虚树上每个点最近的关键点,记作bel。 然后考虑虚树上的每一条边x->y.首先倍增的求出x在原树上的儿子(即x->y路径上的第一个点z)。那么原树上在x->y之间的就有sz[z]-sz[y]个点。(即原树上x->y这条链(不含首尾)及挂在这条链上的所有点)。原创 2018-04-25 20:51:00 · 238 阅读 · 0 评论 -
uoj240【IOI2016】aliens(斜率优化dp+wqs二分)
这是强行交互么qaq 我们可以把所有点都对称到主对角线下方。 然后每个点如果想被覆盖都会有一个最小的三角形,我们可以贪心的只留必须选的点。如果把剩下的点按x坐标升序排序,可以发现他们的y坐标也是升序排序的。记剩余点个数为n,显然每个点都选自己的最小三角形最好。但是有可能n>K,即我们不得不合并一些连续的最小三角形。可以dp,f[i][k]表示覆盖前i个点,用了k个三角形的最少覆盖点。...原创 2018-05-16 22:50:31 · 1222 阅读 · 0 评论 -
loj2478/bzoj5252「九省联考 2018」林克卡特树(树形dp+wqs二分)
首先我们考虑k<=100的60分做法。原题等价于求恰好K+1条点不相交的路径和最大。我们可以直接树形dp,dp[x][j][0/1/2]表示x子树内选了j条路径,du[x]=0/1/2的最大值。复杂度O(nk)O(nk)O(nk)我们考虑怎么优化这个dp。如果记K=i时的答案为ans[i]的话,我们发现ans是一个上凸函数,即ans[i-1]-ans[i]>=ans[i...原创 2018-05-14 22:37:11 · 499 阅读 · 0 评论 -
bzoj4237 稻草人(cdq分治+单调栈)
#include <bits/stdc++.h>using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 200010inline char gc(){ static char buf[1<<16],*S,*T; if(S==T){T=(S=buf)+fread(...原创 2018-05-15 23:29:33 · 300 阅读 · 0 评论 -
CF739E Gosha is hunting(期望dp+wqs二分)
首先我们有朴素dp,f[i][a][b]表示对于前i个小精灵用a个a球,b个b球可以获得的最大期望值。 枚举第i个小精灵的方式转移即可。O(n3)O(n3)O(n^3) 考虑优化这个dp,我们发现这个问题好像还可以费用流…诶,他好像是凸的…诶…wqs二分! 好像两维都可以wqs二分呢!orz 于是O(nlog2n)O(nlog2n)O(nlog^2n)解决了这个问题。 你问我为啥是凸的…...原创 2018-05-16 10:45:21 · 1133 阅读 · 0 评论 -
bzoj5311 贞鱼(dp+决策单调性+wqs二分)
首先我们有朴素dp f[i][k]f[i][k]f[i][k]表示把前i个分成k段的最小代价 f[i][k]=minj=0i−1{f[j][k−1]+w(j+1,i)}f[i][k]=minj=0i−1{f[j][k−1]+w(j+1,i)}f[i][k]=\min\limits_{j=0}^{i-1}\{f[j][k-1]+w(j+1,i)\} 其中w(i,j)w(i,j)w(i,j)表示...原创 2018-06-21 12:02:56 · 820 阅读 · 0 评论 -
CF414E Mashmokh's Designed Problem(ETT+二分)
ETT维护欧拉序。每个点维护它的深度,出点入点基本无异。 第一个操作求个lca就好了qaq,x,y的lca就是(in[x],out[y])中深度最小的点的父亲。 第二个操作,x的kth祖先,就是[1,in[x]]中最靠右的深度为dep[x]-k的点。 第三个操作,我们注意到欧拉序上一段连续的区间的深度是连续的,于是我们可以维护每个区间的深度最小/最大值,然后二分来找到深度k的最后一个出现位置...原创 2018-06-14 12:18:54 · 481 阅读 · 0 评论 -
bzoj4712 洪水(树形动态dp,树链剖分+线段树二分/链分治)
首先考虑不带修改的话,f[x]表示切断x与子树内的叶子的最小花费,有 f[x]=min(v[x],s[x]),s[x]=∑y∈son[x]f[y]f[x]=min(v[x],s[x]),s[x]=∑y∈son[x]f[y]f[x]=min(v[x],s[x]),s[x]=\sum\limits_{y\in son[x]}f[y] 考虑把点x的权值增加val的影响,首先v[x]+=val,f[x...原创 2018-06-17 22:57:46 · 323 阅读 · 0 评论 -
bzoj2216 [Poi2011]Lightning Conductor(决策单调性+分治/二分+单调栈)
化简一下就是求ans[i]=max{aj+|i−j|−−−−−√}−a[i]ans[i]=max{aj+|i−j|}−a[i]ans[i]=max\{a_j+\sqrt{|i-j|}\}-a[i]我们把绝对值去掉,正着倒着各做一遍即可。现在只考虑<i<ijjj设k1<k2<ik1<k2<ik_1ak1+i−k1−−−−−√<ak2+i−k2−−原创 2018-07-02 21:56:10 · 664 阅读 · 0 评论 -
CF453E Little Pony and Lord Tirek(线段树+二分)
考虑如果一个区间在同一时刻被清过零,怎么做。 我们可以把这个区间中的点按生成满能量的时间从小到大排序,然后用生长了的时间去二分。一定是前面一段都是满能量,可以前缀和算,后面一段也可以r的后缀和×生长时间算。 我们线段树维护一下这个东西。 如果区间内有未清过零的点打标记-2. 如果一个区间被统一清过零,打标记清零时间>=0 如果清零时间不统一打标记-1 如果一个区间被完全覆盖并且打...原创 2018-07-09 22:38:30 · 513 阅读 · 0 评论 -
bzoj1563 [NOI2009]诗人小G(dp+决策单调性+二分)
首先有很显然的O(n2)O(n2)O(n^2)dp f[i]=min{f[j]+|s[i]−s[j]+i−j−1−L|p}f[i]=min{f[j]+|s[i]−s[j]+i−j−1−L|p}f[i]=min\{f[j]+|s[i]-s[j]+i-j-1-L|^p\} 30分。 然后考虑p=2的,化一下式子可以发现是个斜率优化。 20分。 考虑4,5两个L非常小的点,可以贪心,每行如果放...原创 2018-07-03 21:29:57 · 351 阅读 · 0 评论 -
bzoj3130 [Sdoi2013]费用流(最大流+二分)
我们发现对于给定的流,Bob的最优决策就是把p全部分配到流量最大的那条边上。因此Alice的最优决策就是在保证最大流的前提下使得流量最大的边流量最小。我们二分一下这个最大流量即可。注意保留小数是真的【捂脸】,因为你要流量最大的边最小,所以就有可能是小数流量,要注意控制精度。 举个例子:【来自ZYF-ZYF】,流量最大的边最小可以是2.5。原创 2018-02-18 22:24:26 · 289 阅读 · 0 评论 -
bzoj2594 [Wc2006]水管局长数据加强版(lct+kruskal+离线)
考虑离线操作,倒着做,就是维护不断往里加边的最小生成树。具体做法与魔法森林差不多。 至于如何找到一条边的标号,可以二分查找来做。原创 2018-03-07 11:31:47 · 258 阅读 · 0 评论 -
bzoj3342 教主的魔法(分块+二分查找)
题意:维护一段序列,两种操作:A.询问[l,r]大于等于v的有多少个。M.[l,r]都加上v分块练习。。对于区间加法,区间内的整块直接O(1)标记,对于剩下的两头的部分暴力更新。对于查询:每一块我们都保证是有序的(暴力更新后的块要重构),那么对于区间内的整块,我们直接二分查找,剩下的两头的部分我们暴力统计即可。#include #include #include #include原创 2017-07-20 18:02:58 · 331 阅读 · 0 评论 -
bzoj3230 相似子串(SA+lcp+二分)
首先用后缀数组处理出h数组。因为要问子串的排名,所以我们再记一个数组num[i],表示前i个后缀有几个本质不同的子串。然后我们用二分查找就可以找到排序后的第i个子串是谁了。然后就是求一下lcp了。。还有反过来的lcp。。算清角标就好了。。还有很坑的一点:可能有超过int范围个实质不同的字串=,=.#include <cstdio>#include <cstring>#include <algor原创 2017-08-03 16:20:00 · 453 阅读 · 0 评论 -
poj3233 Matrix Power Series (二分+矩阵+快速幂)
首先A^k我们可以通过快速幂求得,但是我们不能每一项都去算快速幂,这样还是会超时的。我们发现可以通过二分优化。 如果k为偶数,那么 (A+A2+....AK)=(A+...+Ak2)+Ak2∗(A+...+Ak2)(A+A^2+....A^K) = (A+...+A^{k\over 2})+A^{k\over 2}*(A+...+A^{k\over 2}) 如果k为奇数,那么 (A+A2+.原创 2017-08-10 23:29:35 · 376 阅读 · 0 评论 -
bzoj1012 [JSOI2008]最大数(单调栈+二分/线段树)
线段树维护区间最大值或者单调栈权值递减,二分查位置。。。单调栈显然更快一些。。。线段树版原创 2017-08-11 22:34:41 · 338 阅读 · 0 评论 -
bzoj1669 [Usaco2006 Oct]Hungry Cows饥饿的奶牛(nlogn求最长不下降子序列)
就是求最长不下降子序列,改进了一下,nlognnlogn的做法。多记一个d数组,d[k]表示长度为k的不下降子序列末尾元素的最小值。考虑新进来一个元素a[i]:如果这个元素大于等于d[len],直接让d[++len]=a[i].如果这个元素小于d[len]呢?说明它不能接在最后一个后面了.准确的说,并不是接在谁后面。而是替换掉谁。因为它接在前面的谁后面都是没有意义的,再接也超不过最长的len,所以是原创 2017-08-04 18:43:00 · 739 阅读 · 1 评论 -
FNOI_TEST_1 c(二分)
首先我们要发现b[i]是随着i不降的。。。这就给我们优化提供了可能。正解也是枚举答案区间左端点,但是发现规律用二分查找分界点,优化为O(1)算出。复杂度为O(nlogn)原创 2017-08-20 15:19:04 · 342 阅读 · 0 评论 -
bzoj3277&&bzoj3473 串(SA+二分+lcp)
首先老套路,我们把所有串接在一起,用分隔符隔开,做SA,求出h数组,并用st表求lcp。然后分析题目,我们对于每个串分别统计答案。假定我们正在做第i个串,在总串中从sta开始,到ed结束。则我们要求的就是每个后缀a[sta…ed],a[sta+1…ed]…a[ed]对答案的贡献和。假设我们在求a[j…ed]这个后缀的贡献。则他的贡献就是有几个前缀出现在k个及以上不同串中,显然如果a[j..j+len原创 2017-08-26 14:22:20 · 528 阅读 · 0 评论 -
bzoj3676 [Apio2014]回文串(manacher+SA+二分+lcp)
manacher板子戳这里 我们用manacher枚举回文串,用SA求这个串的出现次数。(利用h数组二分求最大包含区间[l…r],则出现次数为r-l+1)类似这道题。不错的好题。。。原创 2017-08-26 15:58:09 · 321 阅读 · 0 评论 -
bzoj2654 tree(kruskal+二分)
orz clj orz clj orz clj 要求恰有ned条白边的最小生成树。我们发现,给所有白边的权值加上一个正数后,mst中白边的个数是单调不增的。因此我们可以二分给所有白边加上一个值,然后去做最小生成树,统计白边个数,若多于ned,则权值应该再加大,若少于ned,则权值应该再减小。 但是有一个很重要的细节:万一我二分x时,白边个数大于ned,但二分x+1时,却小于ned,也就是说不原创 2017-09-28 12:38:06 · 307 阅读 · 0 评论 -
CF204E Little Elephant and Strings(同bzoj3277)
原题,还写了好久orz。传送门原创 2017-10-07 14:11:41 · 571 阅读 · 0 评论 -
NOIP2001提高组
2001提高 A.一元三次方程求解(枚举+二分答案) 水题写挂orz B.数的划分(dfs/dp)这递推我哪会啊。。。 C.统计单词个数(字符串+暴力+区间dp)这题我哪读得懂啊。。。 D.Car的旅行路线(建图spfa)原创 2017-11-10 15:56:03 · 350 阅读 · 0 评论 -
USACO 2018JAN Silver
A.lifeguards(线段树+枚举) 枚举删掉哪条线段,离散化+线段树维护线段覆盖长度qaq B.rental(贪心+二分+枚举) 枚举留几头牛,贪心算收益qaq C.mootube(并查集+暴力) 类似最大生成树的并查集+暴力处理出dis,然后暴力回答询问qaq原创 2018-01-21 22:27:18 · 1474 阅读 · 0 评论 -
bzoj2756 [SCOI2012]奇怪的游戏(二分+最大流)
首先要二分图染色,我们发现格子个数的奇偶性影响了我们二分图的性质。分类讨论。 如果是偶数个格子,那么黑点白点一样多,记黑点权值和sum1,白点权值和sum2,那么每一次操作是黑白权值和各+1,所以如果最后想所有数都相同,必须sum1和sum2一开始就相同。否则无解。我们还发现偶数个格子时,如果都变成x满足要求,则都变成比x大的数时也一定满足要求。因此我们可以二分一个最小的x,用最大流判满流判是否合原创 2018-01-08 11:01:13 · 345 阅读 · 0 评论 -
CF38G Queue(splay)
题目大意:顺次加入n个点,每个点有一个重要度a和一个交换次数限制c。保证所有的a是1~n的一个排列。每次加入一个点i时,先把i放在队尾,每次与前一个点作比较,如果i重要度更大且还有交换次数就和前一个人交换。问最后的队列是什么样子的。 我们可以用splay来搞。我写的大概有点丑。大概就是看是次数用光了还是碰到一个重要度比自己高的,在树上二分找一下第一个比自己高的,然后插在他后面。原创 2018-02-13 17:59:21 · 394 阅读 · 0 评论 -
bzoj5100 [POI2018]Plan metra(树+构造)
构造题,细节较多。第一次WA:没有判1-n的链上如果d[1][i]相同的话是不合法的。第二次WA:没有判1-n距离为0的情况是不合法的。#include <bits/stdc++.h>using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 500010int n,d[2][N],mn...原创 2019-06-24 17:34:49 · 361 阅读 · 0 评论