Processing math: 0%

随笔分类 -  0x02二分,尺取

摘要:题目链接 #题目大意 求n个数中长度不小于k的子段的最大中位数 #解题思路 考虑一下单调性,如果一个数使一个子段的中位数,那么在这个子段里面不小于他的数肯定大于k/2,我们如果二分这个数的大小的话,很明显是有单调性的。check的话,就把不小于二分的数的位置设为1,否则为-1,然后用前缀和处理,在当 阅读全文
posted @ 2021-02-23 20:59 shuitiangong 阅读(97) 评论(0) 推荐(0) 编辑
摘要:题目链接 #题目大意 有n个会议,每个会议分为a,b两个会场,ab会场的开会时间各有一个时间端,问对于任意两个会议,有没有在同一个会场冲突,而在另一个会场没有冲突的情况。 #解题思路 大体思路就是对于每一个会议,先在一个会场中找到与其冲突的所有会议,再在对应的另一个会场中找有没有与之不冲突的。 具体 阅读全文
posted @ 2021-02-17 22:11 shuitiangong 阅读(57) 评论(0) 推荐(0) 编辑
摘要:题目链接 #题目大意 给n个数a,之后再给m组数b,b中每组数第一个数如果大于a中的某个数,则可以删除这个数,第二个数代表这个数一次能删除几个连续的数。a中的每个数只能按顺序被删除,问最小删除次数。 #解题思路 首先先把b中的数按第一个数排序,然后用一个数组记录大于等于这个数的最大次数,如果次数用完 阅读全文
posted @ 2020-08-31 15:24 shuitiangong 阅读(156) 评论(0) 推荐(0) 编辑
摘要:题目链接 #解题思路 题面差不多已经用的算法写到脸上了,不过有个问题就是怎么判断枚举的区间符合条件,如果直接暴力的话复杂度就要乘上q,但是如果用一个变量来计数的话,就能让时间复杂度降下来。 #代码 const int maxn = 1e5+10; int n,m,a[maxn],cnt[maxn]; 阅读全文
posted @ 2020-07-21 11:04 shuitiangong 阅读(87) 评论(0) 推荐(0) 编辑
摘要:题目链接 #解题思路 马拉车当然是求最长回文既简单又快速的方法,不过这里因为要联系hash就没用马拉车了。设回文串的中心为a,b(奇回文a=b)先正着hash一遍,再倒着hash一遍,就能得到[a+len,a]和颠倒后的[b,b+len]两个子串哈希值,对比它们的哈希值就能判断两个子串是否相等,至于 阅读全文
posted @ 2020-07-18 22:43 shuitiangong 阅读(120) 评论(0) 推荐(0) 编辑
摘要:题目链接 #解题思路 很明显找半径直接二分最小值就行了,但是由于题目给的坐标太大,不可能开一个10000^2的二维数组求前缀和来写check函数,所以就需要离散化处理。 #代码 const int maxn = 5e2+10; int c,n,fr[maxn],fc[maxn],pre[maxn 阅读全文
posted @ 2020-07-15 23:12 shuitiangong 阅读(150) 评论(0) 推荐(0) 编辑
摘要:题目链接 #解题思路 这题可以很巧妙的用二分来解决,因为最多只含一个奇数,所以我们可以二分奇数位置。如果总的防具数是偶数,那么就没有破绽,否则,如果左区间的防具数是奇数,那么答案肯定在左区间,如果右区间的防具数是奇数,那么答案就在右区间。 #代码 const int maxn = 2e5+10; s 阅读全文
posted @ 2020-07-15 12:12 shuitiangong 阅读(145) 评论(0) 推荐(0) 编辑
摘要:题目链接 #题目大意 (懒得写了直接搬的学长的翻译)已知共有n个音符, 一共有K个音符强度。每种音符强度需要A=logK(向上取整)位用来存储。整体所需空间是N\times A位。例如十个音符、一共四种音符强度,则需要10*log4=20位存储。 但由于武学长的硬盘存储空间不足,我们需要选取一定 阅读全文
posted @ 2020-07-03 22:25 shuitiangong 阅读(207) 评论(0) 推荐(0) 编辑
摘要:"题目链接" 题目大意:找出一个最小值x,使n个数能分成m个和小于x的连续区间。 很显然的二分判定答案,不过需要注意有坑,二分的答案必须大于等于n个数中的每一个数。比如5 5 100 200 300 400 500这个数据,答案是500,很明显小于500的话根本无法全部吃 阅读全文
posted @ 2020-04-21 09:37 shuitiangong 阅读(83) 评论(0) 推荐(0) 编辑
摘要:"题目链接" 题目大意:有m次询问, 每次要求在一个长度为n的序列中找出一个区间其和的绝对值与给出的数最接近。(这题有spj,如有多解输出其一即可)。 题目看上去像是尺取的题,但是因为序列中既有正数又有负数,所以其区间和是不具有单调性的,直接尺取显然是无从下手的。不过既然问题问的是区间还是有 阅读全文
posted @ 2020-04-20 19:40 shuitiangong 阅读(108) 评论(0) 推荐(0) 编辑
摘要:"题目链接" 首先提一下第一句很重要,定义一个区间的值为其众数出现的 次数 ,区间的值是次数而不是众数的值。这是一道经典的二分判定答案的题,如果从正面想的话不太好做,确实感觉无从下手,但是可以考虑一下判定答案,毕竟,判定比求解要简单。 因为n \leq 1e5所以,答案的范围就是1n阅读全文
posted @ 2020-04-17 11:03 shuitiangong 阅读(143) 评论(0) 推荐(0) 编辑
摘要:"题目链接" 题目大意:让你找出所有ai+aj bi+bj(i j) 其实这题不用在意i j只要把i\neq j并且符合条件的一对数记做一个答案就行了。。。(显然通过i和j交换必有i j)。然后我们把ai+aj bi+bj变形可得(ai bi)+(aj aj) 0所以我们 阅读全文
posted @ 2020-03-25 17:58 shuitiangong 阅读(184) 评论(0) 推荐(0) 编辑
摘要:"题目链接" 题目要求我们求出满足条件的最大值,因为f的长度不是固定的,所以如果直接求解的话,非常麻烦。但是,如果我们用二分判定答案的话,问题就变得简单了。但是二分必须要区间具有单调性,我们怎么让区间具有单调性呢?对于一个平均值,如果它偏大的话,那么这个区间里面任意长度的序列的平均值都取不到这个 阅读全文
posted @ 2020-03-23 10:42 shuitiangong 阅读(238) 评论(0) 推荐(0) 编辑
摘要:题目链接:https://vjudge.net/problem/POJ-2100#author=DlPF 题目大意:给出一个数n。你要求一段连续的数,这些数的平方和等于n。 直接尺取,因为n最大1e14,所以尺取到1e7肯定出结果 #include<set> #include<map> #inclu 阅读全文
posted @ 2020-02-29 18:56 shuitiangong 阅读(177) 评论(0) 推荐(0) 编辑
摘要:题目链接:https://vjudge.net/problem/POJ-3122 题目大意:你有n个不同大小的派要分给若干个人,每个人分得大小都要一样而且不能有某个人的派是几个不同的派拼成的情况 思路很简单,只要在0~和所有派的面积平均值之间二分最大值就可以了 #include<set> #incl 阅读全文
posted @ 2020-02-29 18:47 shuitiangong 阅读(113) 评论(0) 推荐(1) 编辑
摘要:练习一下刚刚学习的尺取法 #include<cstdio> #include<stack> #include<queue> #include<cmath> #include<climits> #include<cstring> #include<cstdlib> #include<cctype> # 阅读全文
posted @ 2019-11-18 19:35 shuitiangong 阅读(182) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示