![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
二分
yzyyylx
这个作者很懒,什么都没留下…
展开
-
洛谷 P3523 [POI2011]DYN-Dynamite
题面题意 给出一棵树,树上有一些关键点,现在你最多选择m个点,使所有关键点到这些你选择的点的最小距离中的最大值最小.做法 一开始想到的是树形dp,但因为数据过大,且处理麻烦. 正确做法是先二分答案,再用贪心的思想来检验,但记录仍有麻烦 记录时每个点记录两个值,一个是离他最远的并且不在当前选择的点的覆盖范围内的点与他之间的距离,一个是离它最近的已选择的点距他的距离. 转移时原创 2018-02-09 16:11:40 · 283 阅读 · 0 评论 -
2015 ACM-ICPC World Finals G - Pipe Stream
题面做法我们可以发现从v2-t开始,每减去t比较一次,直到L,就可以得到答案。考虑建出二分查找树,发现每一个速度都有一个时间上限(如果超过这个时间就无法比较),这个时间就以为着它在二分树上的最大深度,可以发现每个速度的最大观察深度是一个分段函数,可以逐层考虑这棵二分树,计算它每层可以将答案精确到几个区间中,然后减掉这一层必须确定的速度(若节点数不够,则说明无解),逐层枚举,最后的深度即为答案...原创 2019-02-21 18:10:22 · 406 阅读 · 0 评论 -
[国家集训队]矩阵乘法
题面题意给出一个矩形,每次询问子矩形中第k小的值。做法首先考虑二分答案,但是查询矩形中比某个数小的个数的复杂度极高,因此我们可以考虑整体二分。 整体二分:对于所有询问一起二分,处理时将答案小于等于mid的询问放左边,答案大于mid的询问放右边,然后递归分别处理左右两边,计算小于等于mid的数时,可以用二维树状数组动态完成,这样只要每次对此时处理的询问都询问一次二维前缀和来...原创 2018-08-29 21:21:35 · 248 阅读 · 0 评论 -
BZOJ1926 [SDOI2010]粟粟的书架
题面题意1.给出一个矩形(200*200),每次询问给出一个子矩形和一个数,问在这个子矩形中至少选几个数,使它们的和大于等于给出的数。 2.给出一列数(500000),每次询问给出一个区间和一个数,问在这个区间中至少选几个数,使它们的和大于等于给出的数。做法考虑二分选出数的最小值,这样问题就转化为了:每次判断某个范围内大于等于某数的和是否大于等于给出数。 1.只要用二维...原创 2018-08-28 12:46:39 · 155 阅读 · 0 评论 -
AtCoder 3943 Two Sequences
题面题意给出两个序列a,b,每个序列中都有n个数,将它们两两相加,一共得到n^2个和,求这几个和的异或值。做法考虑逐位确定答案,首先可以发现a,b两数相加后,如果表示m的这位是1,那么令c=a%(m<<1),d=b%(m<<1),则m<=a+b<(m<<1)或a+b>=(m*3). 然后逐位考虑,将b序列模(m*2)后...原创 2018-08-08 07:44:08 · 193 阅读 · 0 评论 -
bzoj4556 [Tjoi2016&Heoi2016]字符串
题面题意给出一个字符串,每次询问给出四个数a,b,c,d,求子串a~b的所有子串与子串c~d的最长LCP。做法首先可以发现答案有可二分性,因此可以先二分答案,这样问题就转化为了问左端点为a~(b-mid+1)的所有后缀中是否存在一个后缀与以c为左端点的后缀的LCP大于等于mid。 这个可以利用后缀数组来解决,首先二分求出与以c为左端点的后缀的LCP大于等于mid的后缀排名的范...原创 2018-07-28 09:02:04 · 542 阅读 · 0 评论 -
CodeForces - 785E Anton and Permutation
题面题意有一个1-n的排列,初始为1,2,3……n,每次交换其中两个数,并且询问此时逆序对的个数。做法某次重新计算逆序对的个数显然会T,因此肯定是要每次计算交换之后对答案产生的影响。 经过观察,交换p,q两位置的数,对答案的影响仅对数字大小在num[p],num[q]之间的数的个数有关。 因此可以考虑分块,对于交换同一块里的两个数时,暴力修改即可。 若在不同的块内,则...原创 2018-07-18 20:00:03 · 232 阅读 · 0 评论 -
洛谷 P3288 [SCOI2014]方伯伯运椰子
题面题意 给出一幅有向图,有一源点(仅一条边与之相连且这条边不可修改)和一汇点,每一条边有一个流量,单位流量所需费用,每额外增加单位流量所需费用和每减少一流量所需费用,给出的图保证所有所有边均满流,现在要修改一些边(改变流量),使修改后的所有边依然满流,且使修改后费用减少量除以修改流量之和的商最大.做法 可以将问题转化,减少边的流量相当于退流,增加边的流量相当于增广,因为与源点相连的边不可原创 2018-03-08 15:15:34 · 322 阅读 · 2 评论 -
bzoj 1863 [Zjoi2006]trouble 皇帝的烦恼
题面题意现在要造k种东西分给围成一个圈的人,每个人要a[i]个,要求相邻的两人分到的东西的种类完全不同,求k最小值.做法如果是链则答案为相邻两数和的最大值,但因为是环,所以最后一人对第一个人有影响,也就不能简单地取最大值. 可以贪心地想,另第一个人分到的东西种类成为特殊物品,要使1和n相同的数为0,就要求第n个人特殊物品最少,就要求第n-1个人分到的特殊物品数最多,第n-2个人分到的最少……这样就原创 2018-03-26 13:27:08 · 242 阅读 · 0 评论 -
Cashier Employment POJ - 1275
题面题意 一家超市24小时营业,给出24小时每小时至少需要的员工数量和n名员工的申请开工时间,每名员工连续工作8小时,问最少雇佣员工数量.做法 利用前缀和可以发现题目可以转化为多个形如x+y<=b的不等式,因而用差分约束系统求解,s[i]表示0到i时雇佣的员工数量和,可以得到以下方程: 1.s[i]>=s[i-1],每小时雇佣的员工数量大于等于0. 2.s[i]-s[i+16]原创 2018-02-23 19:29:35 · 199 阅读 · 0 评论 -
codeforces1098E Fedya the Potter
题面题意给出一个长度为n的序列a,将它的所有子区间的gcd计算出来并存入数组b(长度为n∗(n+1)/2n*(n+1)/2n∗(n+1)/2),并将b区间排序,然后将数组b的所有子区间的和计算出来存入数组c,问数组c的中位数是多少。做法首先因为数组a中的所有数都小于等于100000,因此gcd的数字种类也在这个范围内,对数组a可以用倍增求出每个数字作为gcd的次数。然后考虑二分答案,可以...原创 2019-02-24 20:52:39 · 411 阅读 · 0 评论