
二分
yp_2013
这个作者很懒,什么都没留下…
展开
-
Codeforces 609 D Gadgets for dollars and pounds
传送门: http://codeforces.com/problemset/problem/609/D 题意: 给出每天的人民币兑换美元和英镑的比率 有m个物品,每个物品所需的美元和英镑是不变的,一共n天,s人民币,问最小天数可以买到k个,如果不能买到k个的话就输出-1! 注意是每个物品只能用dollar or pound 去买,因为下面给了1,和2指的就是编号! 题解:Two poin原创 2016-01-16 10:08:21 · 402 阅读 · 0 评论 -
hdu5875 二分加st
题意:给你一个n,n个数 m个询问,每次询问你 l,r,, a[l] % a[l+1] % a[l+2] %……a[r] 结果是多少 思路: 每次有效的取模会使结果减半,因此只有log次有效取模,每次往右找一个不大于结果的最靠左的数,ST表+二分 注意RMQ查询的时候少用 log函数,容易超时, st解法:http://blog.youkuaiyun.com/aitangyong/article/原创 2017-04-12 10:03:53 · 388 阅读 · 0 评论 -
hdu 5682
注意不能只是判断根节点的minn,maxx值大小,而是要判断所有节点的该值大小,有一个不合法就得返回是0,否则就wrong,也就是中间那句if(!dfs()) 特别重要! 正着反着都要去想一想#include<iostream>#include<cstdio>#include<string.h>#include<vector>#include<algorithm>#include<cma原创 2016-06-08 21:52:04 · 291 阅读 · 0 评论 -
hdu 5676 ztr loves lucky numbers
首先记录下来,然后二分。注意暴longlong的坑点#include<bits/stdc++.h>using namespace std;#define ll long longint t ,cnt;const int maxn=1e6+10;ll a[maxn];ll n;void dfs(ll num,int sa,int sb){ if(sa+sb>=20) return原创 2016-06-07 23:09:07 · 279 阅读 · 0 评论 -
CSU 1648: Swipe
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1648题意: 问最少几次横扫可以消灭所有敌人。 相当于每次所有人体力值减1,而且有三点可以任意给一个人,二分答案就可以了!#include<bits/stdc++.h>using namespace std;#define ll long longconst int maxn=1e3+10;原创 2016-02-28 15:56:48 · 252 阅读 · 0 评论 -
hdu 5288 OO’s Sequence
http://acm.hdu.edu.cn/showproblem.php?pid=5288题意:定义f(l,r)为区间中不能整除其余数的数的个数,求增序区间中f的和。直接求肯定T,那么就算每个位置的数对最终答案贡献了多少次,那就找到离他最近的左右两个他能整除的数的位置,ans+=l*r,记录位置,因为数的大小只有1000,所以枚举因子去找就ok了!#include<bits/stdc++.h>u原创 2016-02-23 20:26:01 · 315 阅读 · 0 评论 -
Codeforces 622 C. Not Equal on a Segment
传送门: http://codeforces.com/problemset/problem/622/C题意:输出给定区间不等于e的位置 比赛的时候用愚蠢的方法一直wrong,然后听到q神说用双指针方法,记录每个位置右边最靠左的不等位置就ok了,第二天写了一发果然过了!#include<bits/stdc++.h>using namespace std;const int maxn=1e6+1原创 2016-02-11 10:42:26 · 831 阅读 · 0 评论 -
hdu 5565 Clarke and baton
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=5565题意: 一堆数字,每次最大的数减1,如果最大的有多个,则取序号最小的,问最终序列?其实这道题目还是蛮有意思的,一想肯定复杂度和q有关,而且肯定要从值入手,那么想每次减少的值肯定是从目前的和从上一个值降下来的取序号最小的,那么很显然就可以开两个vector来实现了!这道题真的是醉了,交c++才能过原创 2016-01-28 18:57:46 · 371 阅读 · 0 评论 -
Codeforces D. Professor GukiZ and Two Arrays
传送门: http://codeforces.com/contest/620/problem/D很sb的一道题,暴力加二分即可以过!! 题意: 两个数列,最多可以交换两次,使得二数列和的差最小。 把求得值得表达式子计算出来就是 sum1-a[i]-sum2+b[i] 然后根据这个式子分项进行计算就可以了 直接暴力模拟一次,和两次的情况即可,两次的时候二分找到临界两个,比下大小就可以了s原创 2016-01-23 00:03:52 · 770 阅读 · 1 评论 -
hdu 5592 ZYB's Premutation
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=5592题意: 有一个排列,给出1到i区间的逆序对数,让你还原这个排列!思维题,用线段树做,很显然根据相邻两个数的差,就能得出后一个数的加入又新产生了几个逆序对,那么显然就应该倒着做,可以得出后面的这个数是第k大的,取出当前第k大的数,放到这个位置上就ok了!!线段树维护的是前缀和,具体做法是这样的:原创 2016-01-18 22:14:26 · 439 阅读 · 2 评论 -
续Codeforces 608 C Chain Reaction
传送门: http://codeforces.com/contest/608/problem/C 这次是二分写法 这样写逼格略低,主要就是dp的方式变了,之前是对位置dp现在是对怪物dp。下标就是怪物了,表示的是到这个怪物,之前死掉了多少怪物(这时候就不应该算上后面的死的怪物了),那么我们就需要查找当前怪物能攻击的最远的位置死了多少个怪物,用二分找到那个位置,dp[位置]就表示的是到那个位置死原创 2016-01-18 08:32:55 · 400 阅读 · 0 评论 -
hdu5726
题目大概说给一个包含n个数的序列,多次询问有多少个区间GCD值等于某个区间的gcd值。任何一个区间不同的GCD个数是log级别的,因为随着右端点向右延伸GCD是单调不增的,而每次递减GCD至少除以2。考虑固定左端点,最多就nlogn种GCD,可以直接把所有区间GCD值预处理出来,用map存储各种GCD值的个数,查询时直接输出。具体是这样处理的:枚举左端点,进行若干次二分查找,看当前GCD值最多能延伸原创 2017-04-13 09:27:52 · 425 阅读 · 0 评论