
二分
csu_xiji
这个作者很懒,什么都没留下…
展开
-
力扣 240. 搜索二维矩阵 II 二分
https://leetcode-cn.com/problems/search-a-2d-matrix-ii/思路:做法太多了,最简单的暴力,复杂度O(nm)O(nm)O(nm),或者依次考虑每行/每列,然后二分判断,复杂度O(nlgm)O(nlgm)O(nlgm)或者O(mlgn)O(mlgn)O(mlgn)。这里就说一下最巧妙的O(n+m)O(n+m)O(n+m)的做法,考虑以矩形右上角为起始点,那么我们可以比较matrixx,ymatrix_{x,y}matrixx,y与targettarget原创 2021-10-26 23:52:56 · 427 阅读 · 0 评论 -
力扣 528. 按权重随机选择 二分/堆
https://leetcode-cn.com/problems/random-pick-with-weight/思路一:随机+二分。首先独立计算出每个数被选中的概率,然后计算该数组的前缀和。那么aia_iai被选中的概率就等于sumi−sumi−1sum_i-sum_{i-1}sumi−sumi−1,且sum[0..n)=1sum[0..n)=1sum[0..n)=1。因此每次pickpickpick可以先计算一个[0,1][0,1][0,1]内的随机数,然后看它落到哪个元素的区间范围内,利用二原创 2021-09-02 00:54:34 · 209 阅读 · 0 评论 -
力扣 4. 寻找两个正序数组的中位数 二分
https://leetcode-cn.com/problems/median-of-two-sorted-arrays/思路一:双指针O(n)O(n)O(n)合并两个有序数组。class Solution {public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int n=nums1.size(); int m=nums2.siz原创 2021-07-18 12:47:51 · 160 阅读 · 0 评论 -
力扣 1818. 绝对差值和 数学 二分
https://leetcode-cn.com/problems/minimum-absolute-sum-difference/思路:首先计算sum=∑i=0n∣ai−bi∣sum=\sum_{i=0}^{n}|a_i-b_i|sum=∑i=0n∣ai−bi∣,考虑我们最终把aia_iai替换为了aja_jaj,那么实际答案应为:sum+∣aj−bi∣+∣ai−bi∣sum+|a_j-b_i|+|a_i-b_i|sum+∣aj−bi∣+∣ai−bi∣。我们的目的就是最小化这个式子的值原创 2021-07-17 14:47:45 · 529 阅读 · 0 评论 -
力扣 483. 最小好进制 二分
https://leetcode-cn.com/problems/smallest-good-base/思路:由题目可知,最小是2进制,因此其最终结果的好进制最多含有log2(n)+1log_2(n)+1log2(n)+1个1,考虑到nnn的取值范围,我们最多需要枚举646464次。当1的个数确定的时候,我们可以二分进制kkk,并计算对应kkk进制数的大小,将其与nnn进行比较,如果相等的话,就更新记录最小的kkk。class Solution {public: using ll=long原创 2021-06-26 00:48:45 · 155 阅读 · 0 评论 -
力扣 1482. 制作 m 束花所需的最少天数 二分
https://leetcode-cn.com/problems/minimum-number-of-days-to-make-m-bouquets/思路:经典二分求解最小化最大值问题。没什么好说的,看出来天数的单调性应该就能想到二分吧。class Solution {public: int minDays(vector<int>& bloomDay, int m, int k) { int l=0x3f3f3f3f,r=0,mid,n=bloomDay.原创 2021-05-09 01:30:33 · 146 阅读 · 0 评论 -
力扣 1011. 在 D 天内送达包裹的能力 二分
https://leetcode-cn.com/problems/capacity-to-ship-packages-within-d-days/思路:经典二分求符合题意的最小值问题。显然船的最大运载重量weightweightweight越大,把传送带上所有包裹送达所需要的天数daydayday越小。那么我们可以二分船的最大运载重量,然后O(n)O(n)O(n)判断它是否可以在DDD天内运输完所有的货物。时间复杂度O(nlog(∑i=0nweightsi))O(nlog(\sum_{i=0}^nwei原创 2021-04-26 01:47:38 · 268 阅读 · 0 评论 -
力扣 33. 搜索旋转排序数组 二分
https://leetcode-cn.com/problems/search-in-rotated-sorted-array/思路:二分,判断[l,mid][l,mid][l,mid]、[mid,r][mid,r][mid,r]中哪一个是有序区间,再在该区间内判断。class Solution {public: int search(vector<int>& nums, int target) { int l=0,r=nums.size()-1,mid;原创 2021-04-09 02:26:56 · 114 阅读 · 0 评论 -
力扣 153. 寻找旋转排序数组中的最小值 二分
https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array/思路:首先可以发现,经过旋转后的数组的左侧的最小值一定大于右侧的最大值,那么我们可以二分比较a[mid]a[mid]a[mid]和a[r]a[r]a[r],如果a[mid]<a[r]a[mid]<a[r]a[mid]<a[r],令r=midr=midr=mid,此时不让r=mid−1r=mid-1r=mid−1是因为这个位置可能是我们要找的最小值,原创 2021-04-08 21:12:29 · 111 阅读 · 0 评论 -
力扣 456. 132模式 枚举 二分 贪心 单调栈
https://leetcode-cn.com/problems/132-pattern/思路一:枚举位置jjj,根据贪心思想,aia_iai自然要取左侧最小的那个值,那么假设我们有一个数据结构可以维护有序的元素,删除、插入、查询的复杂度都是log(n)log(n)log(n),这个问题就解决了。在右侧待选数据中二分找到>ai>a_i>ai的最小的数,再看其与aja_jaj关系即可。from sortedcontainers import SortedListclass S原创 2021-03-24 16:49:20 · 213 阅读 · 0 评论 -
PIPIOJ 1476: PIPI的字符串问题X 二分 字符串哈希
http://www.pipioj.online/problem.php?id=1476思路:通过字符串哈希,可以在O(n)O(n)O(n)复杂度内计算出长度为lenlenlen的所有s1s_1s1的子串的哈希值,将其用哈希表存起来,那么就可以在O(n)O(n)O(n)复杂度内判断s1、s2s_1、s_2s1、s2是否有公共子串。二分公共子串的长度,复杂度O(nlgn)O(nlgn)O(nlgn)。#include<bits/stdc++.h>#define INF 0x3f3f3原创 2021-03-04 15:36:41 · 129 阅读 · 1 评论 -
力扣 1208. 尽可能使字符串相等 二分 滑动窗口
https://leetcode-cn.com/problems/get-equal-substrings-within-budget/思路一:考虑枚举转换的字符串的长度,那么在O(s.length)O(s.length)O(s.length)内即可计算出在costcostcost限制下是否有解,那么可以从111开始枚举直到不满足题意为止,但是这样做会超时。不难发现转换的字符串长度和消耗的代价是有单调性的(这里仅考虑最优解),所以可以上二分,那么复杂度大概为O(nlgn)O(nlgn)O(nlgn),可原创 2021-02-05 15:43:31 · 158 阅读 · 0 评论 -
力扣 778. 水位上升的泳池中游泳 二分 并查集 dijkstra
https://leetcode-cn.com/problems/swim-in-rising-water/思路:这不是和昨天的题基本一样吗……直接二分带走。class Solution {public: int dir[4][2]={{0,1},{0,-1},{-1,0},{1,0}}; bool bfs(vector<vector<int>>& grid,int time) { if(grid[0][0]>time原创 2021-01-30 14:37:21 · 166 阅读 · 0 评论 -
力扣 1631. 最小体力消耗路径 二分 并查集 dijkstra
https://leetcode-cn.com/problems/path-with-minimum-effort/思路一:二分,由于格子的取值范围为[1,106][1,10^6][1,106],所以最终结果的取值范围一定[0,106][0,10^6][0,106]之内,我们可以二分最终结果的值,然后看在这个限制条件下能否从左上角走到右下角,再依据结果缩小二分范围。class Solution {public: int dir[4][2]={{-1,0},{1,0},{0,1},{0,-1原创 2021-01-29 15:40:34 · 254 阅读 · 0 评论 -
力扣 378. 有序矩阵中第K小的元素
https://leetcode-cn.com/problems/kth-smallest-element-in-a-sorted-matrix/思路:显然易得矩阵最小值为m[0][0]m[0][0]m[0][0],最大值为m[n−1][n−1]m[n-1][n-1]m[n−1][n−1],那么我们可以二分第kkk小元素的值midmidmid,再遍历矩阵的每一行(或列)判断<=mid<=mid<=mid的数的总和,假设为numnumnum,如果num>=knum>=knum原创 2020-10-18 01:26:25 · 209 阅读 · 0 评论 -
力扣 275. H 指数 II 二分
https://leetcode-cn.com/problems/h-index-ii/思路:即找到arr[i]>=n−iarr[i]>=n-iarr[i]>=n−i的第一个iii,所以是求满足题意的最小值,那么在不满足条件时再修改下限lll即可。class Solution: def hIndex(self, citations: List[int]) -> int: n=len(citations) l,r=0,n-1原创 2020-10-18 01:01:08 · 236 阅读 · 0 评论 -
洛谷 P1429 平面最近点对(加强版)分治/暴力+二分
https://www.luogu.com.cn/problem/P1429思路一:正经解法:分治。首先把nnn个点按照xxx排序,每次按照p[mid].xp[mid].xp[mid].x把点集分成两部分,solve(l,mid)、solve(mid+1,r)solve(l,mid)、solve(mid+1,r)solve(l,mid)、solve(mid+1,r)得到每一部分点对之间的最小值ansansans。那么总体最小值要么等于ansansans,要么等于左右两部分各选一个点组成的点对之间的距离。原创 2020-05-12 18:10:19 · 715 阅读 · 0 评论 -
牛客练习赛61 E 相似的子串 二分+哈希+dp
https://ac.nowcoder.com/acm/contest/5026/E思路:其实就是找一个长度为xxx的字串,使得它在字符串sss中至少出现了kkk次,且这kkk个sss均不相交。很显然,长度xxx满足单调性,所以我们可以二分长度。那么如何快速判断两个字串是否相等呢?哈希。我们设进制为basebasebase,h[i]h[i]h[i]表示s[1…i]s[1…i]s[1…i]的哈希值...原创 2020-04-11 14:18:19 · 163 阅读 · 0 评论 -
Round A 2020 - Kick Start 2020 Workout 二分
https://codingcompetitions.withgoogle.com/kickstart/round/000000000019ffc7/00000000001d3f5b题目大意:小明有一个健身计划,由nnn部分组成,第iii部分需要aia_iai分钟,保证序列aaa严格递增,整个计划的难度定义为Max(ai−ai−1),2<=i<=nMax(a_i-a_{i-1}),...原创 2020-03-22 17:28:31 · 459 阅读 · 0 评论 -
力扣 4. 寻找两个有序数组的中位数 递归+二分
https://leetcode-cn.com/problems/median-of-two-sorted-arrays/思路:这个复杂度限定还是挺有意思的。假设getkth(k)getkth(k)getkth(k)可以求出数组aaa和数组bbb后并之后的第kkk个数,设数组a、ba、ba、b的长度分别为n1、n2n_1、n_2n1、n2,设k1=(n1+n2+1)/2,k2=(n1+n2...原创 2020-03-16 01:18:27 · 287 阅读 · 0 评论 -
UVALive 3231 Fair Share 二分+网络流
https://vjudge.net/problem/UVALive-3231题目大意:每组数据nnn个处理器,mmm个任务,每个任务限定两个处理器,只能使用其中的某一个来解决,每个任务都需要花费111分钟来解决,你需要在解决所有任务的情况下使得花费时间最长的那个处理器所花费的时间尽可能短。思路:首先考虑最大流建图,源点向每个任务连边权为111的边,每个任务向它的两个处理器连边权为111的边,...原创 2020-03-05 22:01:47 · 211 阅读 · 0 评论 -
codeforces 1303B National Project 二分
https://vjudge.net/problem/CodeForces-1303B题目大意:你要修一段长度为nnn的铁路,天气情况为ggg天好天气、bbb天坏天气,循环往复。你在好天气修的铁路是好的,坏天气修的铁路是不好的,但是只要保证修的铁路中至少有一半的铁路是好的就行,问最少需要多少天(每天最多修111长度的铁路,或者跳过这天)。思路:直接写二分,考虑的部分比较少。昨晚就是上头了非得...原创 2020-02-13 14:49:52 · 412 阅读 · 0 评论 -
codeforces 671B Robin Hood 二分+思维
http://codeforces.com/problemset/problem/671/BWe all know the impressive story of Robin Hood. Robin Hood uses his archery skills and his wits to steal the money from rich, and return it to the poor....原创 2019-11-03 17:27:35 · 311 阅读 · 0 评论 -
洛谷 P1525 关押罪犯 带权并查集或 二分+染色法判二分图
https://www.luogu.org/problem/P1525题目描述S城现有两座监狱,一共关押着N名罪犯,编号分别为1−N。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多。如果两名怨气值为c 的罪犯被关押在同一监狱,他们俩之间会发生摩擦,并...原创 2019-10-28 00:51:09 · 243 阅读 · 0 评论 -
洛谷 P2161 [SHOI2009]会场预约 树状数组+二分
https://www.luogu.org/problem/P2161题目描述PP大厦有一间空的礼堂,可以为企业或者单位提供会议场地。这些会议中的大多数都需要连续几天的时间(个别的可能只需要一天),不过场地只有一个,所以不同的会议的时间申请不能够冲突。也就是说,前一个会议的结束日期必须在后一个会议的开始日期之前。所以,如果要接受一个新的场地预约申请,就必须拒绝掉与这个申请相冲突的预约。 一般来...原创 2019-10-26 13:45:21 · 232 阅读 · 0 评论 -
HDU 5968 异或密码(CCPC2016合肥) 暴力+二分
http://acm.hdu.edu.cn/showproblem.php?pid=5968Problem Description晨晨在纸上写了一个长度为N的非负整数序列{ai}。对于这个序列的一个连续子序列{al,al+1,…,ar}晨晨可以求出其中所有数异或的结果 alxoral+1xor…xorar其 中xor表示位异或运算,对应C、C++、 Java等语言中的^运算。小璐提出了M个询...原创 2019-10-19 16:51:10 · 190 阅读 · 0 评论 -
洛谷 P1462 通往奥格瑞玛的道路 二分+dijkstra
https://www.luogu.org/problem/P1462题目背景在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量有一天他醒来后发现自己居然到了联盟的主城暴风城在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛题目描述在艾泽拉斯,有n个城市。编号为1,2,3,…,n。城市之间有m条双向的公路,连接着两个城市,从某个城市到另一个城市,会遭到联盟的攻击,进而...原创 2019-10-16 21:52:05 · 232 阅读 · 0 评论 -
codeforces 1100E Andrew and Taxi 二分+拓扑排序
https://codeforces.com/problemset/problem/1100/E题目大意:给nnn个点和mmm条边,每条边以(u,v,dis)(u,v,dis)(u,v,dis)的形式给出,表示有一条从uuu指向vvv的权值为disdisdis的有向边,任意取一值valvalval,你可以翻转边权<=val<=val<=val的边的方向,问这个valvalval...原创 2019-09-29 19:13:18 · 142 阅读 · 0 评论 -
HDU 2852 树状数组+二分查询
http://acm.hdu.edu.cn/showproblem.php?pid=2852For the k-th number, we all should be very familiar with it. Of course,to kiki it is also simple. Now Kiki meets a very similar problem, kiki wants to d...原创 2019-03-13 19:01:46 · 279 阅读 · 0 评论 -
牛客 华华给月月准备礼物 二分
https://ac.nowcoder.com/acm/contest/392/E链接:https://ac.nowcoder.com/acm/contest/392/E来源:牛客网题目描述二月中旬虐狗节前夕,华华决定给月月准备一份礼物。为了搭建礼物的底座,华华需要若干根同样长的木棍。华华手头上有一些长度参差不齐的木棍,他想将每根都裁剪成若干段自己想要的长度,并丢掉多余的部分。因...原创 2019-03-10 21:35:56 · 169 阅读 · 0 评论 -
lower_bound和upper_bound的一些总结
头文件:<algorithm>lower_bound和upper_bound都是用在有序的数组或者容器中的!(以下函数并非是函数原型 只是为了便于说明 可能并不严谨 想看函数原型的请戳这个网址:https://baike.baidu.com/item/lower_bound/8620039?fr=aladdin)lower_bound(begin,end,value) 可以在...原创 2019-02-18 16:57:11 · 1853 阅读 · 0 评论 -
洛谷 1182 二分 最小化最大值
https://www.luogu.org/problemnew/show/P1182题目描述对于给定的一个长度为N的正整数数列A−i,现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小。关于最大值最小:例如一数列42451要分成3段将其如下分段:[42][45][1]第一段和为6,第2段和为9,第3段和为1,和最大值为9。将其如下分段:[4][2...原创 2019-02-17 16:04:26 · 340 阅读 · 0 评论 -
洛谷 P1316 二分
https://www.luogu.org/problemnew/show/P1316题目描述陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢?输入输出格式输入格式: 第一行,两个整数,A,B。(B<=A<=100000)第二行,...原创 2019-02-17 15:24:51 · 325 阅读 · 0 评论 -
CodeForces 999D 贪心+set+二分
http://codeforces.com/problemset/problem/999/DYou are given an array consisting of nn integers a1,a2,…,an and a positive integer m . It is guaranteed that mm is a divisor of n .In a single move, y...转载 2019-01-21 15:57:29 · 238 阅读 · 0 评论 -
CodeForces 474B 二分
http://codeforces.com/problemset/problem/474/BIt is lunch time for Mole. His friend, Marmot, prepared him a nice game for lunch.Marmot brought Mole n ordered piles of worms such that i-th pile con...原创 2019-01-21 15:44:40 · 247 阅读 · 0 评论 -
CSU 1023 二分 最小化最大值问题
http://acm.csu.edu.cn:20080/csuoj/problemset/problem?pid=1023前段时间,某省发生干旱,B山区的居民缺乏生活用水,现在需要从A城市修一条通往B山区的路。假设有A城市通往B山区的路由m条连续的路段组成, 现在将这m条路段承包给n个工程队(n ≤ m ≤ 300)。为了修路的便利,每个工程队只能分配到连续的若干条路段(当然也可能只分配到一条...原创 2019-01-21 15:38:41 · 150 阅读 · 0 评论 -
二分的经典问题 最大化最小值和最小化最大值
有点长~可以选自己想看的部分看~不过建议把刚开始的介绍看完~不多说,先来一个在升序无重复元素的数组中二分搜索的板子。(l+r)/2=mid可能会爆int这种细节问题我们就放一边。int a[MAX];int Binary_Search(int v){ int l=0,r=n-1; while(l<=r) { int mid=(l+r)/2; if(a[mid]=...原创 2019-01-20 21:53:19 · 2966 阅读 · 0 评论 -
POJ 2785 二分
http://poj.org/problem?id=2785The SUM problem can be formulated as follows: given four lists A, B, C, D of integer values, compute how many quadruplet (a, b, c, d ) ∈ A x B x C x D are such that a +...原创 2019-01-20 19:56:14 · 212 阅读 · 0 评论 -
HDU 2141 二分
http://acm.hdu.edu.cn/showproblem.php?pid=2141Give you three sequences of numbers A, B, C, then we give you a number X. Now you need to calculate if you can find the three numbers Ai, Bj, Ck, which ...原创 2019-01-20 19:46:17 · 144 阅读 · 0 评论 -
Codeforces Global Round 2 B Alyona and a Narrow Fridge
http://codeforces.com/contest/1119/problem/BAlyona has recently bought a miniature fridge that can be represented as a matrix with hh rows and 22 columns. Initially there is only one shelf at the bo...原创 2019-04-11 00:01:46 · 417 阅读 · 0 评论