
二分
keyboarder_zsq
你所认为的极限,其实是别人的起点。
展开
-
POJ2366【二分】
题意: 给两个序列,问两个序列中是否有两个数加起来=1e4; 思路: 直接先排序好b序列,然后枚举a序列,二分查找b序列就好了; 贴一发挫code….//#include <bits/stdc++.h>#include<iostream>#include<math.h>#include<string.h>#include<cstdio>#include<algorithm>usi原创 2016-08-17 23:34:03 · 776 阅读 · 0 评论 -
HDU3433 【时间的二分+DP最优解】
crazy!原创 2016-12-23 23:26:18 · 657 阅读 · 0 评论 -
SPOJ PHT【二分】+SPOJ INUM【最小/大值重复】
BC 两道其实都是水 没有完整地想好直接就码出事情。wa了一次以后要找bug,找完要把思路理的非常清楚SPOJ PHT【二分】#includeusing namespace std;int main(){ long long n; int T,CAS=1; scanf("%d",&T); while(T--) { scan原创 2016-12-25 00:08:01 · 143 阅读 · 0 评论 -
HDU5381【莫队算法+区间GCD特性】
NO RESPONSE!原创 2017-02-18 22:36:38 · 1355 阅读 · 0 评论 -
FZU2216【二分】
题意:百度。思路:一个连续数组111222233344444555666的每一个起伏转折即需要一张万能牌。然后二分一下得最长区间。#include#include#include#include#include#include#include#includeusing namespace std;typedef long long LL;const LL原创 2017-02-28 16:46:33 · 117 阅读 · 0 评论 -
Codeforces Round #299 (Div. 2)【A,B,C】
codeforces 535A-水题;#include using namespace std;typedef long long LL;char s2[15][20]={"eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"};char s1[15][原创 2017-03-05 11:00:26 · 387 阅读 · 0 评论 -
二分的两种重要模型
STL中的两个函数(详见:点我): ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)算法返回一个非递减序列[first, last)中的第一个大于等于值val的位置。ForwardIter upper_bound(ForwardIter first, ForwardIter last, const原创 2016-08-14 23:53:41 · 658 阅读 · 0 评论 -
Codeforces 92C【二分】
yep.原创 2017-03-18 11:30:32 · 434 阅读 · 0 评论 -
PAT L2-014【二分】
思路:最后发现对当前列车比我大的编号的栈有没有就好了,所以开个vector存一下,然后二分一下vector找一下第一个比我大的数就好了#include using namespace std;typedef long long LL;const int N=1e5+10;int n,a[N];vectorq;int main(){ scanf("%d",&n); for原创 2017-03-24 14:43:29 · 312 阅读 · 0 评论 -
51nod1258【二分】
思路:据说又有O(n)的算法。。算了。。我还是贴个nlog(n)的二分区间长度,满足长度越小越“不满足”。所以二分一下,judge一下就好了;略坑的就是。。。一日为山峰终生为山峰。。。#includeusing namespace std;typedef long long LL;const int N=5e4+10;bool vis[N];int h[N];int a原创 2017-04-10 22:35:34 · 466 阅读 · 0 评论 -
HDU5522【二分】&&HDU5523【。。】&&HDU5524【完全二叉树】
HDU5522a[k] + a[j] = a[i]; 二分查找a[i]; 然后发现很有意思的常识:int占多少个字节 vector < int >a; printf(“%d\n”,a.begin(),a.begin()+1);Code:#include <bits/stdc++.h>using namespace std;typedef long long LL;int原创 2017-05-24 20:33:35 · 486 阅读 · 0 评论 -
HDU4585【树状数组/STL】
题意: 有n+1个僧侣,然后1号已经在塔里了,能力值是1e9,现在依次给你两个数, 第一个代表标号,第二个代表能力值,每次挑一个在塔里的能力最接近的跟她打,如果能力相同的取小,然后把它扔进塔里 每次输出两个标号,一个旧的,一个新的。思路: 当时就感觉很水,所以做着做着就… 变成了,离散化能力值,然后利用树状数组维护,然后二分查找值的最近点…【确实麻烦了】 ++: 1. 前缀和寻找比 x原创 2017-07-05 09:52:10 · 469 阅读 · 0 评论 -
CodeForces-232A【构造 二分】
对于3就是C(2, 2), 对于4就是C(2, 3), 对于5就是C(2, 4), 后面你可以发现,会是一个{1},{1,2},{1,2,3},{1,2,3,4}…而且是拿x与1,2相连会有1个环,然后每多一条边会每次按照那些序列增加环。 现在就变成了这种序列构造一个k,预处理出这个数量,二分一下,然后之后因为值小,模拟就好了。#include<bits/stdc++.h>using names原创 2017-07-30 10:30:20 · 370 阅读 · 0 评论 -
Lightoj 1138【二分 + 求 N! 的后导零个数】
怎么对于N求有多少后导零??? 因为每间隔 5 个数有一个数可以被 5 整除, 然后在这些可被 5 整除的数中, 每间隔 5 个数又有一个可以被 25 整除……一直到0然后知道了这个就可以直接二分求值; 二分类型:0000011111111 1: 代表num(x)>=num(mid)#include<bits/stdc++.h>using namespace std;typedef lon原创 2017-07-18 20:45:26 · 526 阅读 · 0 评论 -
Codeforces460C【二分+线段树】
二分最小值,如果你能实现这个最小值是可以实现的,那么一定是最优的,因为每次区间+1,原来存在的最小值的个数还是存在的,但是新的可能会多起来,所以最小值递增还是最优到最优的;考虑如果不能实现这个最小值,那么他一定是比之前这个值少的,因为最小值不变,而且个数变少;区间维护可以线段树。#include <bits/stdc++.h>using namespace std;typedef long lo原创 2017-08-01 21:52:58 · 571 阅读 · 0 评论 -
CodeForces540E【树状数组+二分】
思路: 1:变换的做一次树状数组求逆序就好了 2:然后就是对于变换的求前面有多少个比他大,后面有多少个比他小 具体: 对于当前位置,前面有多少比他大,然后减去被占多少位置(二分就好) 对于后面位置,后面有多少比他小,然后减去被占多少位置(二分就好) 然后就是模拟了。。然后就过了~#include <bits/stdc++.h>using namespace std;#define m原创 2017-09-15 14:13:49 · 678 阅读 · 0 评论 -
UVALive-7267/UVALive-7261/UVALive-7269/UVALive-7263
UVALive-7267题意: 给出4个矩形,问你是否用三个矩形组成一个新矩形 思路: 要么就是三个矩形存在一条相同的边 要么就是两个矩形有相同边然后贴在一起组成新边去贴另一个矩形的一条边//#pragma comment(linker, "/STACK:102400000,102400000")#include <stdio.h>#include <string.h>#include原创 2017-10-08 19:33:52 · 937 阅读 · 0 评论 -
lightoj 1076 【二分找满足条件的最左】
#include using namespace std;typedef long long LL;typedef unsigned long long ULL;typedef pairPII;const double eps=1e-5;const double pi=acos(-1.0);const int INF=0x3f3f3f3f;const int N=1e3+10;原创 2016-11-25 15:35:20 · 298 阅读 · 0 评论 -
CodeForces 363D 【二分+贪心】
思路:一开始是没有办法贪心的,但是大致的思路就是我最好就是买价格便宜的车,这样肯定是能买到最多的车,而且花的少。所以直接二分答案。然后人的总花费=最有钱的那些人去买最便宜的那些车的情况;#include using namespace std;typedef long long LL;typedef unsigned long long ULL;typedef pairPI原创 2016-12-04 13:52:54 · 435 阅读 · 0 评论 -
Codeforces702C【二分】
题意: 给你几个城市,蜂窝塔量; 给出城市和塔的坐标可以重叠,非递减的方式给出; 输出最小的r,以至于所有的城市能被覆盖到; 思路: 目的就是要使每个城市覆盖到,那我对每个城市找离最近塔的距离,然后在这些距离里面找一个最大的就好了。 怎么对每个城市找离其最近的塔呢? 可以直接lower_bound,找到位置,然后距离比小就好了,但是每次答案要取大;#include<cstdio>#i原创 2016-08-18 23:43:50 · 453 阅读 · 0 评论 -
51nod 1272【二分+RMQ】
思路: 这题不能说是长见识,倒是第一次写这么富有套路的题,倒着来,二分区间嘛,这个很简单啊,二分的条件查询一个当前区间的最小值是不是比那个特定的值小,一步步缩小,这就是二分嘛,然后查询用线段树的RMQ写法搞,logn。 二分的模型是0000000111111111这个,窝还是照着自己的两篇小博客写的,一个是线段树,一个是二分。。。然后过的///希望熟能生巧吧#include <stdio.h>原创 2016-08-31 23:08:16 · 391 阅读 · 0 评论 -
51nod 1267【二分】
思路: 首先我们能够很容易地想到,4个数的和,拆成两两相加:a+b=-c-d; 我们也能很轻松地求出两两之和,但是呢。。不同的和会存在相同的值相加,所以还要排除这个条件。具体操作就是标记一下,然后将和二分来操做#include <stdio.h>#include <map>#include <stdlib.h>#include <string.h>#include <iostream>原创 2016-09-02 17:10:20 · 357 阅读 · 0 评论 -
Codeforces 702B【二分】
题意: 给一个a数组,输出有多少对相加是等于2^x的。1<=a[i]<=1e9,n<=1e5 思路: a[i]+a[j]=2^x 对于每个a[i],枚举x,然后二分查找a[j]; ps: ①:数组大的简单题,基本上就是二分这种降低复杂度; ②:对于a+b=c,三个对象都有考虑的意义;加一发挫code……#include<cstdio>#include<iostream>#inclu原创 2016-08-13 00:46:20 · 452 阅读 · 0 评论 -
Codeforces645C【二分】
题意: 给你一个序列,0表示空,1表示非空 你需要填k+1个位置,然后找出某一点到其他所有点都是最近的,然后输出一个最近的情况的最远点。 思路: 哎,好菜哦。。。不会写这个二分。。。 遍历每个可取的位置,以区间>=k+1为判断条件,然后二分整个区间,逐渐逼近这个距离。。。 好菜啊,代码借鉴某巨巨…也是吃到苦头了…要多写些了…#include<iostream>#include<cstd原创 2016-08-13 23:35:17 · 433 阅读 · 0 评论 -
POJ3258【二分】
题意: 问一个河岸,两岸之间有笔直的n块石头,然后拔起(也可以施展魔法)m个石块,假设两岸也是石块,求处理过的石块的最小距离的最大。 思路: 他让我们求移开m个石块,无非是在n+2-m(已经把两岸看成了石块)块里找一个最小距离最大,然后就是二分距离,然后判断条件是存在符合>=x(二分的距离)的石块>=n+2-m个; 二分模型是11111111111100000000000,求满足条件最右;原创 2016-08-14 23:23:17 · 437 阅读 · 0 评论 -
POJ2456【二分】
题意: n个位置,m个帅气的窝的化身,然后窝要去这些位置,问一个最小距离的最大。 思路: 就是二分最小距离,然后判断一下该最小距离x 下,是不是存在>=m个窝的化身之间的距离>=x就好了; 二分模型是:11111111111000000000 满足条件的最右;贴一发挫code…….//#include <bits/stdc++.h>#include<iostream>#include<原创 2016-08-14 23:28:37 · 420 阅读 · 0 评论 -
Codeforces626C 【二分】
题意: 有两种搬砖的(不好好打代码就只能搬砖了),有n个sou弱的只能搬2块,m个stronger一点的能搬3块,他们想作死的独自把砖垒高,然后每个人垒的高度还各不相同,问你存在的最高高度的最小; 思路: 对于x块砖,他可以存x/2+x/3-x/6块砖,那么直接二分一下最高高度,判断条件如下代码。 二分模型是:0000000000111111111,满足条件的最左。 贴一发挫code………原创 2016-08-14 23:38:42 · 323 阅读 · 0 评论 -
51nod1010【二分】
打表+二分#include <bits/stdc++.h>using namespace std;typedef long long LL;const LL inf=1e18+100;LL a[20000];int num;void init(){ num=0; LL i,j,z; for(i=1;i<inf;i=i*2){ for(j=1;j*原创 2016-09-19 16:34:54 · 604 阅读 · 0 评论 -
hdoj5493【树状数组+二分】
题意: 给你n个人的高度, 再给出一个值代表该高度下有前面比他高的 或 后面比他高的人数, 求满足条件下的最小字典序, 不行的话输出”impossible” 思路: 对于最小字典序,对于每个位置的最小是=min(k,n-i-k); 先离线排序一下,然后对每个人操作,如果(n-i-k)<0,二分找一下这个位置,然后存一下就好了;#include <bits/stdc++.h>using原创 2016-09-21 22:29:06 · 400 阅读 · 0 评论 -
51nod 1278【贪心】
主要这道题没有包含的情况,所以直接搞个左端,然后对于每个二分求一下>right的最近的位置j,那么ans就会增加 j 以后的;#include #include #include #include #include using namespace std;const int N=5e4+10;struct asd{ int x,y;};asd q[N];int n原创 2016-10-12 23:04:18 · 457 阅读 · 0 评论 -
2016 Multi-University Training Contest 1 GCD【RMQ+二分】
题意: 第一个数求给定询问区间的GCD,第二个数求在这个给定区间里面有多少种连续区间的GCD是等于第一个数。 思路: 无思路。原创 2016-07-19 16:56:03 · 1329 阅读 · 0 评论 -
HDU4791【杂】
题意:给你一个从0开始的区间si,每个区间是前闭后开,[ s[i] , s[i+1] ), 然后再给你个一个pi,代表你在区间[ s[i] , s[i+1] )里面买东西的单价是pi,给出的s1一定是0,给出的顺序是s1,p1,s2,p2...sk,pk,...sn,pn。然后给你个m个值,然后计算买了>=b[m]个物品需要花费的最少值;思路:预处理一下,买si个物品需要的花费,用个数原创 2016-10-27 21:55:32 · 410 阅读 · 0 评论 -
Codeforces Round #377 (Div. 2)A,B,C,D【二分】
Codeforces732A水题;#include#include#include#include#include#include#include#includeusing namespace std;typedef long long LL;const int INF=0x3f3f3f3f;const LL mod=1e9+7;int main(){原创 2016-10-19 12:43:03 · 451 阅读 · 0 评论 -
HDU1597【二分瞎搞】
题意:求第n个数;思路:可以看到一种序列:112123123412345123456123456712345678123456789123456789112345678912123456789123...那么我可以计算前 i 行数的个数(i+1)*i/2;直接二分到离n最近的那一层,然后n-(i+1)*i/2;%9就是答案,注原创 2016-10-07 23:47:03 · 431 阅读 · 0 评论 -
lightoj1062【几何(二分)】
其实就应该想到,哪有那么简单让你直接搞出答案的几何题啊;(而且很有可能是二分?题意:有两个梯子,一个靠在左边墙上,一个靠在右边墙上,长度分别为 x 和 y,他们的交点距离地面高度是 c,求两个梯子底部的距离。思路:二分底部距离,然后算C(通过相似三角形就好了,两个比值(C比梯子顶部到墙底的高度)相加是1),和C比较,很容易发现,底部距离一大,C就小,一小,C就大,满足单调性。原创 2016-12-02 00:11:12 · 437 阅读 · 0 评论 -
Codeforces830A【二分+贪心】
二分其实很好考虑对吧,时间越多,满足的越多,如何judge呢,这个仔细想想还是挺有意思的. 1.左边的人拿左边的钥匙能在这个时间段满足,那就满足,对于整体方案来说是最优的 2.如果左边的对于某把钥匙不满足,之后出现了某个位置钥匙满足,那么之前那把钥匙一定是在这个人的左边,那么进而证明右边的人也一定不会用到这把不满足的钥匙.//#pragma comment(linker, "/STACK:10原创 2017-10-19 16:00:02 · 429 阅读 · 0 评论