二分
文章平均质量分 76
cillyb
这个作者很懒,什么都没留下…
展开
-
poj 3104 Drying(二分)
DryingTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 13600 Accepted: 3499DescriptionIt is very hard to wash and especially to dry clothes in winter. Bu原创 2016-08-15 15:49:24 · 351 阅读 · 0 评论 -
Educational Codeforces Round 23 D. Imbalanced Array(单调栈或RMQ+二分)
题意:imbalance值:一段区间中最大值与最小值之差给你一个数组(n思路:首先想到RMQ,nlogn预处理,但是还得n^2跑一下所有区间,显然不行。大神的思路:从每个数可作为最大值被计算次数Maxki和最小值计算次数Minki入手,答案就是sum(Maxki*num[i]-Minki*num[i])那么如何计算Maxki和Minki呢?原创 2017-07-05 23:12:30 · 346 阅读 · 0 评论 -
Educational Codeforces Round 23 C. Really Big Numbers(二分 数学)
题意:一种数的定义是:数本身与该数每一位和的差大于等于给定的S。现在给你n让你求不大于n的数中有多少个满足要求。(n,s 思路:一开始想着是数位dp,但不知道怎么记录,,其实有一个单调性,如果x满足,那么x+1一定满足。证明:数学归纳法: 假设x是reall big,那么设x的各项和为sumd(x),由条件有x - sumd(x) ≥ s。那么对于 x + 1 有s原创 2017-07-05 23:03:31 · 326 阅读 · 0 评论 -
1489: L先生与质数V4(二分+大区间求素数模板)
题意L先生想求出第n个质数(素数)是多少,你能帮助他吗?数据T 输入1234101000输出Case 1: 2Case 2: 3Case 3: 5Case 4: 7Case 5: 29Case 6: 541HDU5901是个求1-1e11内素数原创 2017-05-31 21:07:50 · 620 阅读 · 0 评论 -
51nod 1184 第N个质数(二分+大区间求素数模板)
第1个质数是2,第3个质数是5,给出一个数N,求第N个质数。Input输入1个数N(1 Output输出第N个质数。思路:二分套求素数个数模板。代码:#include #include #include #include #include #include #include #include using namespace std;ty原创 2017-05-31 23:37:08 · 1098 阅读 · 0 评论 -
Codechef Consecutive Snakes(三分)
点击打开链接 题意在年度阅兵中,所有的士兵蛇都在阅兵场集合了,但这些蛇的站位不对。整场阅兵必须能从主席台看清楚,所有蛇都应该站成一排。但这些士兵非常懒惰,你必须指挥士兵重新排队,使得所有人的移动距离之和最短。形式化地,整支阅兵队伍可以视作一条数轴。共有N条蛇,每条蛇是一根长度为L的线段。第i条蛇初始时占据了[Si,Si + L]的区间,蛇与蛇之间可以重合。能从主席台看到原创 2017-05-30 15:27:10 · 441 阅读 · 0 评论 -
2017 华东师范大学网赛 G. 铁路修复计划(二分+最小生成树)
思路:直接二分答案,然后求一下最小生成树看看花费是否满足M。注意M读入的时候不要读成int.代码:#include#include#include#includeusing namespace std;const int maxn = 1e5+5;struct node{ int u, v, t; double s; bool operator原创 2017-05-14 17:38:16 · 420 阅读 · 0 评论 -
2017 华东师范大学网赛 F.丽娃河的狼人传说( 贪心)
题意:方便起见,丽娃河可以看成是从 1 到 n 的一条数轴。为了美观,路灯只能安装在整数点上,每个整数点只能安装一盏路灯。经专业勘测,有 m 个区间特别容易发生事故,所以至少要安装一定数量的路灯,请问至少还要安装多少路灯。思路:按右端点排序,然后缺的路灯尽量往后放,这题数据很弱,暴力也可以过。。。比赛的时候智障了,-1的时候没有输出Case #,wa了半天。暴力代码:#incl原创 2017-05-14 17:32:15 · 453 阅读 · 0 评论 -
hdu 5700 区间交(树状数组+二分)
题目地址:点击打开链接思路:对左端点进行排序,然后一边更新,一边查询。因为按左端点排序,所以左端点可以作为相交区间的左端点,然后可以根据是否被大于等于k次覆盖二分查找k个区间覆盖的最大的右端点。此时对应的区间就是这个左端点能得到的最大区间。枚举完左端点后得到的就是最大值了。代码:#include#include#include#includeusing原创 2017-03-14 23:52:41 · 512 阅读 · 0 评论 -
Codeforces Round #424 (Div. 2) D. Office Keys(贪心 二分 or DP)
题意:有n个人和k把钥匙(n=n),n个人都必须拿一把钥匙去p点,一把钥匙不能多人拿。问最后每个人都到达p点最少需要多少时间。思路:对人和钥匙都排序一下,然后有两种做法:1.二分答案 贪心验证:每次尽量取左边的钥匙2.DP:转移方程:dp[i][j] = min(dp[i][j-1], max(dp[i-1][j-1], abs(a[i]-b[j])+abs(b[j]-原创 2017-07-14 23:31:17 · 496 阅读 · 0 评论 -
hihoCoder 1403 后缀数组一·重复旋律(最长可重叠重复子串问题)
描述小Hi平时的一大兴趣爱好就是演奏钢琴。我们知道一个音乐旋律被表示为长度为 N 的数构成的数列。小Hi在练习过很多曲子以后发现很多作品自身包含一样的旋律。旋律是一段连续的数列,相似的旋律在原数列可重叠。比如在1 2 3 2 3 2 1 中 2 3 2 出现了两次。小Hi想知道一段旋律中出现次数至少为K次的旋律最长是多少?解题方法提示输入第一行两个整数 N和K。1≤N≤原创 2017-07-17 19:17:52 · 749 阅读 · 0 评论 -
51nod 1686 第K大区间(二分 尺取)
题意:定义一个区间的值为其众数出现的次数。现给出n个数,求将所有区间的值排序后,第K大的值为多少。思路:答案具有单调性,所以可以二分,关键是check的时候怎么统计有多少区间满足>=mid, 我们可以知道假如区间[L, R]满足,那么左右扩大这个区间都是满足的,所以可以尺取,枚举右端点,找到最大的符合条件的l即可,对答案贡献为l,而且l也只会向右动。右端点向右移动一步,有两种情况,一种原创 2017-09-29 17:36:58 · 339 阅读 · 0 评论 -
51nod 1711 平均数(二分 树状数组)
题意:给你一个长度为n的序列,问所有区间(n*(n+1)/2个区间)中第k大的平均数。思路:首先可以想到答案具有单调性,所以可以用二分,但是怎么二分呢?所以我们只要将所有的sum[i]-ans*i作为新数组,类似求逆序对一样的方法插入BIT,就能计算出满足>=ans的个数, 注意别忘了把0也插入进去。因为存在sum[l-1]-ans*(l-1), 还有k别忘了开long l原创 2017-09-29 15:21:47 · 388 阅读 · 0 评论 -
HDU 5884 Sort (二分 贪心(k叉哈夫曼树))
官方题解:代码:#includeusing namespace std;typedef long long ll;const int maxn = 1e5+5;int a[maxn];int n, T;namespace fastIO { #define BUF_SIZE 1000000 //fread -> read bool IOe原创 2017-09-15 23:49:08 · 395 阅读 · 0 评论 -
HDU 5875 Function (RMQ+二分)
题意:给你一个长度为n的数组,现在有q次询问,每次询问给你l, r, 求a[l]%a[l+1]%a[l+2]...%a[r], (n 思路:因为取模一个比自己大的数是没用的,所以我们每次只需要找下一个比当前结果小的就行,这样就可以RMQ预处理区间最值,然后二分查找下一个位置了。。。有个知识,一个数x,最多只能被取模logx次。所以这个解法的时间复杂度是可以保证的代原创 2017-09-03 22:24:42 · 396 阅读 · 0 评论 -
BZOJ 4552 排序(二分 || 线段树合并)
题意:对一个1~n的全排列, 进行m次局部排序(0, l, r)将区间[l, r]数字升序排列(1, l, r)将区间[l, r]数字降序排列仅一次询问, 询问m次局部排序后第q位置上的数字1 ≤ n, m, q ≤ 1e5思路:这题有个神奇的做法,我们可以直接二分答案x,然后把大于等于x的都看作1,比x小的都看作0插入线段树中,然后执行m个询问,因为数组中原创 2017-08-12 00:59:01 · 1005 阅读 · 0 评论 -
HDU 4430 Yukari's Birthday (枚举 二分)
题意:要在一个蛋糕上放置n个蜡烛,摆成r个同心圆,第i个个同心圆的糖果数为k^i,中间圆心可以放一个蜡烛也可以不放,让你求r和k,使得r*k最小,若有多个答案输出r最小的那个。(n=2)思路:根据等比数列求和公式我们可以知道k*(1-k^r) / (1-k) = n或n+1,我们可以发现r最大才40,所以我们可以枚举r,这样r确定,和就满足k的单调性,这样可以二分来确定k是否存原创 2017-07-26 15:28:03 · 361 阅读 · 0 评论 -
CodeForces 672D Robin Hood(二分)
题意:给你N个人的财富值,每天最有钱的人会给最没钱的人一块钱,问K天之后,最穷的人和最富有的人之间差多少钱。思路:二分确定k天后的最大值和最小值,二分的上下界要注意一下,如果sum能被n整除,最小值下界为一开始最小的,上界为sum/n,最大值下届为sum/n,上界为一开始最大的;如果不能被整除,最小值下界仍为一开始最小的,上界为sum/n,但最大值的下界为sum/n+1,上届为一开原创 2017-08-02 23:12:41 · 341 阅读 · 1 评论 -
51nod 1421 最大MOD值 & codeforces 485D Maximum Value(思维 数学)
题意:有一个a数组,里面有n个整数。现在要从中找到两个数字(可以是同一个) ,使得 最大并且 1 ≤ n ≤ 2*10^5,1 ≤ ai ≤ 10^6思路:5 6 7 8 9这样的序列只对于5来说的话,求对5的mod最大值,会发现其实并不需要求6%5,7%5,8%5,我只需要求5和10之间最大的那一个就可以,如果还有更大的就求10到15之间最大的,以此类推下去。(原创 2017-08-01 23:50:20 · 504 阅读 · 0 评论 -
poj 3685 Matrix(二分嵌套)
题目地址:点击打开链接思路:二分答案,然后判断这个答案是在m之前还是之后。那么怎么知道这个二分的值在前在后呢?可以数比他小的数有多少,那怎么数呢?暴力n*n肯定超时,由给出的公式可知j确定时,表达式关于i单调,所以就可以枚举j二分i确定每个j比他小的数由多少个,这样就可以nlogn时间判断,最后复杂度n*logn*logn。WA:一开始找到的规律是从右上原创 2017-03-02 15:13:21 · 464 阅读 · 0 评论 -
hdoj 2852 KiKi's K-Number(树状数组+二分)
要多次查询大于某个值得第k个值。所以可以用树状数组来维护这个容器,用二分来查询这个值。代码:#includeusing namespace std;typedef long long ll;const int maxn = 1e5+5;ll a[maxn], tree[maxn];int lowbit(int x) { return x&(-x);原创 2016-10-29 17:04:10 · 486 阅读 · 0 评论 -
hdu 5248 序列变换(二分+贪心)
题目地址:点击打开链接思路:二分套路题,二分最小代价,贪心去验证是否能变成递增序列,验证时要尽可能让每个数变得最小。代码:#include#include#includeusing namespace std;const int maxn = 1e5+5;int a[maxn], n, t, ca = 1;bool judge(int x){原创 2017-02-28 22:16:57 · 780 阅读 · 0 评论 -
poj 1019 Number Sequence && hdu 1597 find the nth digit(二分,模拟)
两个题很相似,都是问你第i位是几,但排列的顺序有点不太一样.hdu 1597的每个单位是前一个单位后加个1-9中的一个循环添加;poj 1019的每个单位是前一个单位后加(i+1)思路都一样,想办法记录截止到某个单位其前缀一个有几位,这样就可以二分快速找出第i位在哪个单位,剩下的就好办了。poj的比较难想,需要记录原创 2017-02-27 21:42:45 · 437 阅读 · 0 评论 -
UVALive 7500 Boxes and Balls(模拟,二分)
题目地址:点击打开链接题意:你手里有N个球,现在需要用你手里尽可能多的球使得这个游戏经过多次游戏后形成一种恒定状态思路:最后形成一种恒定状态的情况是每个盒子里放得球数一定是个连续的序列,1, 1 2, 1 2 3, 1 2 3 4....因为只有这样从任意一个框里取出一个球放到另一框后再排序,得到的还是原来的序列。所以知道这后只要求比n小的最大前n项和即可,可以用二分来原创 2016-12-01 15:57:15 · 558 阅读 · 0 评论 -
Codeforces Round #379 (Div. 2) C. Anton and Making Potions (二分)
题意:要制作n瓶药水,有m种魔法A,k种魔法B;每制作一瓶药水需要的标准时间是x,共有s点魔法值;对于魔法A来说,花费b[i]点魔法值能把药水的标准时间降为a[i];对于魔法B来说,花费d[i]点魔法值能直接完成c[i]瓶药水;A和B都只能使用一次,即只能使用A的一种方案和B的一种方案;求制作n瓶药水的最小时间是多少;原创 2016-11-17 17:41:58 · 473 阅读 · 0 评论 -
hdoj 4791 Alice's Print Service(二分)
题意:现在你要打印一些东西,比如需要99张纸,打印100张以下时话费10元每张,100张及100张以上时需要5元每张,此时你可以选择打印100张,使得花费更小。现给一个数字n,表示n个区间段,然后有s1,p1,s2,p2......sn,pn,表示打印纸张大于等于s1而小于s2时,每张纸话费p1元,现有m个询问,问每次给你x张纸,所需的最小花费是多少。思路:可以从后往前做一个O原创 2016-11-29 17:08:18 · 465 阅读 · 0 评论 -
poj 3737 UmBasketella(三分)
我们都知道 二分查找 适用于单调函数中逼近求解某点的值。如果遇到凸性或凹形函数时,可以用三分查找求那个凸点或凹点(即最值)。还有通过这道题知道了,输出doubleG++用%lf会wa,一定要用%f,而C++用%lf和%f都可以。题意:给出圆锥的表面积(包含底面)。求其最大体积,以及此时的底面半径及高代码:#include原创 2016-10-30 19:42:57 · 597 阅读 · 0 评论 -
Codeforces Round #377 (Div. 2) C. Sanatorium(贪心,二分)
主要是要能想到贪心策略,要尽量在后面几天考。又因为结果肯定是单调的,一个能考完的点的右边肯定是都能考完,一个不能考完的点的左边肯定是不能考完的。所以就可以用二分。代码:#includeusing namespace std;const int maxn = 1e5+5;int n, m, can[maxn], need[maxn];bool book[maxn]原创 2016-10-18 21:41:37 · 410 阅读 · 0 评论 -
poj 2785 4 Values whose Sum is 0(二分)
直接暴力是复杂度是n^4,可以分成两组,ab、cd各一组,先求出ab能组成的数,然后对其排序,再求cd能组成的数的同时二分ab能组成的数确定有几组能组成0。这样就把复杂度降到了n^2*logn.再二分找ab中有多少符合的数时巧妙的用到了upper_bound和lower_bound的差。代码:#include#include#include#includeu原创 2016-10-27 12:49:25 · 416 阅读 · 0 评论 -
CodeForces - 363D Renting Bikes(二分,贪心)
题目地址:点击打开链接题意:n个人,每个人自己有一定的钱,还有公共的预算。m辆自行车,每辆车有一定的价格。求最多能租几辆车并且用的私房钱的总数最少。思路:遇到这种题总是想不到正确的思路方向。二分车辆,然后贪心验证。最后用私房钱最少就是需要买价格最低的k辆车花费和-公共的钱,注意下不能是负数。还有注意用long long。代码:#include#include#inclu原创 2017-02-24 11:45:55 · 590 阅读 · 0 评论 -
CodeForces 748E. Santa Claus and Tangerines(二分,递推)
题意:有n个数分给m个人每个数可以分成两个新的数 i/ 2 、(i+1)/2 分后的数可以继续分,但不允许分1=1+0最后分给每个人,求分得的数最小的人分得的数最大能多少。有两个方法。第一个方法是二分答案,然后从1e7到二分的值按照i的奇偶性把i的值传给i/2或i/2和i/2+1,然后计算当前二分的值是否能分给m个人。时间复杂度是n*logn*logn,勉强能过.原创 2017-03-04 00:24:35 · 566 阅读 · 0 评论 -
POJ 3579 Median(二分)
题意:给出n(3思路:二分答案,再二分检验,注意分辨下是该用upper_bound还是lower_bound. 答案应该是要找最小的满足小于等于他的数>=M个(包括自己)代码:#include#include#include#includeusing namespace std;const int maxn = 1e5+5;int a[maxn], n, M原创 2017-05-03 23:57:06 · 429 阅读 · 0 评论 -
1010 只包含因子2 3 5的数(丑数 二分)
题意:K的因子中只包含2 3 5。满足条件的前10个数是:2,3,4,5,6,8,9,10,12,15。所有这样的K组成了一个序列S,现在给出一个数n,求S中 >= 给定数的最小的数。例如:n = 13,S中 >= 13的最小的数是15,所以输出15。思路:筛选丑数可以用紫书上的那个优先队列方法,预处理出1e18的丑数,然后二分查找大于等于N的第一个丑数即可。原创 2017-05-10 23:53:42 · 504 阅读 · 0 评论 -
POJ 2182 Lost Cows (树状数组+二分 / 线段树 / 枚举)
给出n和每个数之前比它小的数有几个 需要输出原序列,最后一个数的真实值为a[N]+1将a[N]+1在序列中删去,更新a[i],那么第N-1个数的真实值为a[N-1]+1。做法很多,线段树,树状数组加二分或是枚举都可以。线段树代码:#include#include#includeusing namespace std;const int maxn原创 2017-03-14 23:38:08 · 927 阅读 · 0 评论 -
2016 EC-Final Problem D. Ice Cream Tower(二分+贪心)
题目地址:点击打开链接题意:有N个冰淇淋球,做一个冰淇淋需要K个球,这K个球还必须满足上下相邻的下面比上面大至少两倍。先给出N个球的质量,问最多能做出多少个冰淇淋?思路:二分可以做的冰淇淋数,贪心验证是否可以堆成,将冰淇淋按从小到大排序,一层一层贪心地堆就可以了,因为这个冰淇淋如果当前不能用上,那么后续更不可能用上。代码:#includeusing n原创 2017-03-10 23:48:12 · 1165 阅读 · 0 评论 -
Codeforces 366D Dima and Trap Graph(搜索剪枝/二分)
题目地址:点击打开链接题意:给你一个图,每条边有一个[L, R],只有在这个区间内的点才能通过,问满足能从1到n的最大连续区间的长度为多少思路:二分思路:枚举下界,二分上界,dfs是否能到。搜索思路:剪枝1.如果到过该点,并且此时的左右边界比原先的小,剪枝;剪枝2:如果当前左右边界范围的值比之前搜到的答案还小,剪枝;二分代码:#i原创 2017-03-07 20:47:45 · 802 阅读 · 0 评论 -
LightOJ 1048 Conquering Keokradong (二分)
题目地址:点击打开链接思路:二分容易想到,但是坑点不好想到。这组数据14 31002645会出现输出不全,需要自己手动控制下输出k+1个数代码:#include#include#includeusing namespace std;const int maxn = 1e3+5;int n,原创 2017-03-08 22:28:08 · 386 阅读 · 0 评论 -
Codeforces 778A String Game(二分)
题目地址:点击打开链接题意:给出两个字符串,再给一个删除的序列,a[i]表示要把原字符串1中的第i个字符去掉。问最多可以按照顺序删除第一个字符串中的字符多少个,使得第一个字符串剩余部分还能包含一个相对位置的第二个字符串思路:二分答案,枚举验证就行了。。代码:#includeusing namespace std;const int maxn原创 2017-03-08 20:26:16 · 872 阅读 · 0 评论 -
poj 3258 River Hopscotch(二分)
题目地址:点击打开链接题意:一条河长度为 L,河的起点(Start)和终点(End)分别有2块石头,S到E的距离就是L。河中有n块石头,每块石头到S都有唯一的距离问现在要移除m块石头(S和E除外),每次移除的是与当前最短距离相关联的石头,要求移除m块石头后,使得那时的最短距离尽可能大,输出那个最短距离。思路:二分最短距离,贪心验证可行性就行。原创 2017-02-26 00:11:27 · 428 阅读 · 0 评论 -
HDU 6070 Dirt Ratio(二分+线段树)
题意:给你一个长度为n的数组,让你求size(l, r)/(r-l+1)的最小值。[l, r]是给定数组一个子序列,size(l, r)的值为这个区间的不同数的个数。(n 官方题解:二分答案midmid,检验是否存在一个区间满足\frac{size(l,r)}{r-l+1}\leq midr−l+1size(l,r)≤mid,也就是size(l,r)+mid×原创 2017-10-13 16:31:14 · 523 阅读 · 0 评论