二分 不只是查找值
陈末iiiiiiiiiiii
Retired
展开
-
AcWing 4487. 最长连续子序列 单调栈上二分 数组模拟栈的好处
首先讲公式化简为sum[r] - 100r > sum[l] - 100lsum为前缀和。这一步是很容易想到的,这样就只有一个变量了。然后就是怎么通过枚举一个i来确定前面的数小于自己且最远的数是什么。想了很久没想出来,y总这里使用了单调栈上二分来处理,之前没有见到过这种操作。先使用一个降序的单调栈来保证单调栈上的每个数都是最远的(手模理解)。如果这个数比栈顶还小,那肯定取不到答案,我们将它入栈。(如果一个数能取到答案,我们肯定不入队,因为在它前面肯定有更小的数)如果比栈顶大,说明存在答案。原创 2022-06-26 17:45:34 · 268 阅读 · 0 评论 -
Codeforces Round #791 (Div. 2) D 二分最小化最大值 拓扑排序 非联通图dfs判环
题目有一天,玛莎在公园里散步,在一棵树下发现了一张图表……很惊讶?你认为这个问题会有一些合乎逻辑和合理的故事吗?没门!那么,问题…Masha 有一个有向图,其中第 i 个顶点包含一些正整数 ai。最初,玛莎可以将硬币放在某个顶点。在一次操作中,她可以将放置在某个顶点 u 中的硬币移动到任何其他顶点 v,从而在图中存在有向边 u→v。每次将硬币放在某个顶点 i 时,玛莎都会在她的笔记本上写下一个整数 ai(特别是,当玛莎最初将硬币放在某个顶点时,她会在笔记本上写下这个顶点处的一个整数)。 Masha 想要原创 2022-05-16 19:41:36 · 114 阅读 · 0 评论 -
Codeforces Round #776 (Div. 3) E 二分 贪心 分类讨论 边界处理 multiset
题目现在 Dmitry 有一个会话,他必须通过 n 次考试。会议从第 1 天开始,持续 d 天。第i次考试将在ai(1≤ai≤d)那天进行,所有ai-都是不同的。样本,其中 n=3,d=12,a=[3,5,9]。橙色——考试日。第一次考试前,Dmitry 休息 2 天,第二次考试前休息 1 天,第三次考试前休息 3 天。对于课程安排,Dmitry 考虑了一个特殊值 μ——所有考试的考试前休息时间中的最小值。例如,对于上图,μ=1。换句话说,对于日程安排,他精确地计算了 n 个数字——他在考试 i-1原创 2022-03-09 18:03:50 · 193 阅读 · 0 评论 -
2021牛客寒假算法基础集训营4 D 二分枚举答案 双指针维护区间
题目题解思路因为亲密度是第一键值,所以所有亲密关系,可以根据亲密度的情况来分类,并且每个亲密度下的关系有序(编号从小到大)。即存在一个亲密度,它的亲密关系 + 之前更小的亲密度的关系 刚好 大于等于 K。这里就有点分界点的意思了,所以我们尝试二分亲密度,看看能不能在On级别处理出这个亲密度以及一下的所有关系总数。枚举出P为此时的亲密度。这里双指针也太顶了,我们可以先处理出两个指针之间大小为P的区间的数的情况,即用哈希表统计每个数的情况。再用一个cnt来记录这个区间内和首指针不同的数的个数。首原创 2021-11-30 20:14:28 · 390 阅读 · 0 评论 -
2021牛客寒假算法基础集训营4 字符串哈希成数字 二分枚举可行长度
题目题解思路因为字符串hash是从第一位往第N位乘 进制所以第一位会被乘N次。当我们要去 i 到 j 的hash值的时候让hash[j]减去hash[i-1]*(j-i+1)*进制相当与吧hash[i-1]加了(j-i+1)个 0 。这样一减就是 i 到 j 的hash值的实值了。有点难理解和普通数字的进制有点相反,多模拟几遍。枚举每个相同的前缀,这样就可以直接二分可以延展的最大的长度了。根据可行性二分枚举。最大长度减了一点还是可以拼接成他的子串。属实巧妙AC代码#inc原创 2021-11-26 21:35:20 · 95 阅读 · 0 评论 -
Codeforces Global Round 17 C 二分枚举答案 二分可行不可行
题目有N个人可以去你家聚会,每个人有的钱是 1 2 3 … N另外每个人还有一些要求比他有钱的人至多为ai个 比他穷的人至多为bi个如果没满足要求,他就会不开心。你想邀请最多的人,让他们都开心。求最大的人数。题解思路一开始没看到at most,至多,以为是恰好那么多人。假设存在一个答案为X人我们从这个最优答案中从后面抽走一个人,也是可行。因为要求是至多,而小一个人并不影响至多的情况。所以,我们可以推出 0 到 X 直接的都是可行解。当答案大于X就是不可行的。这样我们二分答案原创 2021-11-24 17:54:07 · 325 阅读 · 0 评论 -
AtCoder Beginner Contest 227 D 二分枚举答案
题目题解思路肯定是每次拿最大的K个数,优先队列T了。我们枚举二分能操作的次数为P具体证明看下面题解参考题解参考题解AC代码#include <bits/stdc++.h>//#include <unordered_map>//priority_queue#define PII pair<int,int>#define ll long longusing namespace std;const int INF = 0x3f3f3f3原创 2021-11-21 17:10:23 · 453 阅读 · 0 评论 -
华东交通大学2021年ACM“双基”程序设计竞赛 F 线段树 二分出合法区间
题目题解思路看的出是线段树,一开始想用线段树的操作来模拟操作一,但是好像弄不出。这里就有个性质了,当你要修改某段为1的时候你查询它的总和不为它的长度时,只需将总和改成长度然后pd一下就行了。但是这个从哪里开始哪里结束要怎么返回呢?利用前缀和的单调性就能得到这段有几个被填上了的。所以我们可以进行二分,二分出那个没被填上的第一个点,以及二分出填的时候结束的位置(这里利用上面的性质,我们只需知道两个端点将他们的sum改成长度然后pd即可)这里的二分属实巧妙啊 int ans原创 2021-11-19 17:38:31 · 904 阅读 · 0 评论 -
牛客xb月赛40 E 最小化最大值 经典二分枚举答案问题
题目题解思路思路偏了,一直往优化最值的方向走了。这里最值是一定是可以二分出来的。过大的时候只需要比m少个组,过小的时候,需要比m大的组。很经典的最小化最大值模型,太久没写忘记了。AC代码#include <bits/stdc++.h>//#include <unordered_map>//priority_queue#define PII pair<int,int>#define ll long longusing namespace std;原创 2021-11-06 10:30:39 · 61 阅读 · 0 评论 -
2021 ICPC 江西省大学生程序设计竞赛 J 二分 队列 模拟
题目你有一个可以调节容量的(存放数字)容器,一开始为空。给你N次查询 。问有至少多大的容量能完成K次完美操作。如果这个数字不在容器,并且容器满了,那就将最久之前查询的数从容器种删除,再加上这个数。如果容器没满就直接加入。如果在容器就将这次查询称为完美操作。题解思路容器越大,完美操作数肯定越高。因为不会使别的数被删除。所以容量具有单调性。这样我们就可以二分枚举出这个答案了。log这样我们需要在On内判断出枚举的答案的准确性。我们利用哈希表和队列来模拟这个操作。用哈希值来记录在不在容器里。原创 2021-10-25 20:25:11 · 197 阅读 · 0 评论 -
244. 谜一样的牛 树状数组 根据正序数 逆向求出原排序
题目题解思路先将排列数的计数 插入树状数组 , 从最后一个数开始往前推 , 最后一个数在树状数组里的前缀和 (这里就是正序数 + 1 ) 必然等于 他的正序数 + 1(加上自己)。我们可以利用二分来搜出这个数 。当这个数被求出后,我们在树状数组里删除他(因为我们是从后面往前推的,所以我们不能让后面的数对前面的数求正序数造成影响 )。时间复杂度 O n log n log nAC代码#include <iostream>#include <cstdio>#inclu原创 2021-10-01 11:31:47 · 56 阅读 · 0 评论 -
102. 最佳牛围栏 二分枚举答案 求最大平均值
题目题解思路很容易想到二分枚举出平均值但是如何在 On内判断这个平均值在题目里的情况 大还是小闫总用到了前缀和 先减去枚举的平均值取mins为 1~k-f的最小值 不断往前更新的同时 ,根据每个K判断 此时的答案是大是小 。有点动态规划的思想AC代码#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <vector>原创 2021-09-25 16:10:51 · 77 阅读 · 0 评论 -
Educational Codeforces Round 114 (Rated for Div. 2) C 二分 + 贪心
题目最近,Petya了解到一款新游戏“杀龙”。顾名思义,玩家必须与龙搏斗。要打败一条龙,你必须杀死它并保卫你的城堡。为此,玩家有一队n英雄,第二个英雄的力量等于ai。根据游戏规则,只有一个英雄应该去杀龙,其他所有的英雄都将保卫城堡。如果龙的防御力等于x,那么你必须派一个至少有x力量的英雄来杀死它。如果龙的攻击力是y,那么守卫城堡的英雄们的总力量至少应该是y。玩家可以用一枚金币将任何英雄的力量增加1。此操作可以执行任意次数。游戏中有m龙,第i条龙的防御力相当于xi,攻击力yi。佩蒂亚想知道他打败第i条原创 2021-09-22 15:18:55 · 90 阅读 · 0 评论 -
AcWing 3973. 无线网络 二分枚举答案 闫总的二分模板 根据单调性进行双指针优化
题目题解思路R肯定是在0 到 1e12 (这里原来写的INF 被坑了 - 1e9 到 1e9之间要再弄大点 )之间的介于能覆盖和不能覆盖的节点上很明显可以通过二分枚举R来得出答案而且R一定是整数 因为如果不是的话,在接触站点的时候每次都会多出小数部分的功率接下来就是 在n的复杂度内 判断答案的正确性但是存在两个数组我们枚举一个,然后让另一个不断往前。这样在整个循环中 每个n和m都只出现一次 复杂度就是 n其实这就是双指针的思想 。AC代码#include <iost原创 2021-09-19 10:32:22 · 60 阅读 · 0 评论 -
POJ - 2785 折半枚举 (双向搜索 )
题目给你4个长度为N的数组,从每个数组中拿出一个数,加起来为0的情况有几种。从不同位置拿出来的就叫不同情况。题解思路将问题简化为A + B = -(C+D) ,枚举C+D的所有和进行排序,对于枚举出的A+B二分查找相反值。时间复杂度化简为N平方log N当原数组为升序时,upper_bound查找第一个大于值的数,lower_bound查找第一个大于等于的数。作差就是相等的值。AC代码#include <iostream>#include <cstdio>#incl原创 2021-08-10 20:42:47 · 92 阅读 · 0 评论 -
POJ 3104 洗衣服脱水问题 不光是查找值 二分搜索 枚举最值
题目题解思路利用二分来对最值进行枚举 先 排序 找出上下界 再写出对每个枚举值的检查函数即可l 下界,r 上界while l<r mid=(l+r)/2 if(mid 满足我们指定的条件) r=mid else l=mid+1最后的l就是最优解。上界和下界可以看出分别是 水分最大的衣服的水分值 和 0 然后关键就在写check 函数之所以取上界 是因为 用烘干机洗的不一定都是K的整数倍 有可能少一点 但是用时是一样的 所以原创 2021-04-21 16:34:02 · 82 阅读 · 0 评论