二分
hohotiger
这个作者很懒,什么都没留下…
展开
-
CodeForces - 660C Hard Process
题意就是 在这个数串中插入1构成一个最长的连续1的区间串如何做?我们可以对长度进行二分从1到n二分长度 然后在对这个长度拿到数串中查看是否能构成最终我们想要的最长匹配串这里我们可以利用一个前缀和数组 统计从1到i的0的个数 由于必然是递增数组 就满足了二分的“有序”条件 。#includeusing namespace std;int a[300010],s原创 2017-06-12 22:31:55 · 227 阅读 · 0 评论 -
pat 1085 Perfect Sequence (25) 二分查找
题意给我们一个数串 让我们从中挑选数字 构成一个集合 使得集合中最小元素m和最大元素M 满足 m*p>=M 求出集合的最大数量分析看下条件就可以发现 m*p >=M 也就是在数串中找m*p>=x x的上界 那么排下序二分找即可code#include<bits/stdc++.h>using namespace std;typedef long long ll;int a[100原创 2017-12-09 11:46:49 · 181 阅读 · 0 评论 -
二分查找总结
二分查找其实并不简单 这个算法有很多版本 而且变化也比较多 稍一不留神就容易写错 这里总结一下 一般二分查找 binary_serachint f(int array[], int key,int len) { int left = 0; int mid,right = len; // 这里必须是 <= while (left <= right) {原创 2017-10-22 19:03:26 · 184 阅读 · 0 评论 -
CodeForces 895 B. XK Segments 二分查找
题意定义n个数和x 让我们在这n个数中找出 多少个不同的对 分析观察条件我们要找的是对于一个元素ai 找到另外一个元素 aj 使得a[i]<=a[j] 所以我们需要排序 也就是对于每一个元素 ai 我们可以确定他后面有k个x的整数区间的范围 假设下界为lb上界为ub 那么 当a[i]除x的余数不为0:lb = a[i]+x-(a[i]%x)+(k-1)*x , ub = a[i]+x原创 2017-11-29 19:52:13 · 224 阅读 · 0 评论 -
HDU-4282 A very hard mathematic problem 技巧枚举+二分
题意xz+yz+x∗y∗z=kx^z+y^z+x*y*z = k ( y>x&&z>1y>x&&z>1) 给我们这个等式让我们找出这里面有多少个不同的可行解分析表面上数据范围比较大 但由于k最大都在int范围内 由于后面还有一个x*y*z 于是这个式子的指数不会超过31 再来分析x和y 这里必定是一个y大x小 那么假如我们先枚举一个数 那么另一个数的范围必定就是 1~y-1 由于这个式子是原创 2017-11-03 11:26:09 · 257 阅读 · 0 评论 -
HDU-3998 Sequence LIS统计
题意让我们在数串统计最长长度的LIS有多少个 每个LIS元素没有重叠分析这题可以用nlogn的LIS方法水过 就是每次我们更新找到的LIS长度的时候 就把当前位置下的元素标记 表示我们把它删掉了 不断地重复找LIS的过程 最后如果找到的长度小于我们最初找到的LIS长度 就退出循环 复杂度大概在O(number of LIS * n * logn)code#include<bits/std原创 2017-11-02 17:29:11 · 178 阅读 · 0 评论 -
LIS 的 n*log 算法 ———二分维护
upper_bound只会替换让留在数组里的最长递增子序列尽可能小 由于upper查出来的结果下标是那个可以插入这个值得最后一个元素 所以他会把大的数变成小的数upper将可以替换成新元素的元素替换成更小的 将不能替换的元素 大的元素直接放在最后面 很神奇你会发现 这个问题 通过一个二分就能解决 如何解决的呢 我们要在vector中维护一个递增序列 如何维护 那就是每当我们遍历过程原创 2017-11-02 17:19:39 · 720 阅读 · 0 评论 -
HDU-5532Almost Sorted Array LIS问题
题意就是检查这个序列是否删除一个元素就能变成非严格的有序序列 表面上就是一个卡条件检查数组的问题分析: upper_bound只会替换让留在数组里的最长递增子序列尽可能小 由于upper查出来的结果下标是那个可以插入这个值得最后一个元素 所以他会把大的数变成小的数upper将可以替换成新元素的元素替换成更小的 将不能替换的元素 大的元素直接放在最后面 很神奇你会发现 这个问题 通过一个二原创 2017-09-01 16:15:59 · 243 阅读 · 0 评论 -
codeforce 803-B 二分查找
#include<bits/stdc++.h>using namespace std;const int maxn = 2e5+10;int a[maxn],ans[maxn];vector<int>v;int lowerbound(int x){ int l = 0,r = v.size()-1,mid; while(l<=r){ mid = l+r>>原创 2017-10-28 14:53:45 · 191 阅读 · 0 评论 -
HDU-6180 Schedule
题意 给n个工作的开始时间和结束时间 每个工作需要用机器来完成 让我们给这n个工作规划机器 规划出尽可能少机器数目 以及计算最少的机器时间(机器时间为机器使用的最终结束时间减去开始时间)分析 这道题其实就是一个工作的开始结束形成了一个线段 让我们求多个线段不交叉不重叠拼接拼到一个方向上 拼合后 求最终剩下的线段方案数 和工作时间所以这道题可以看出一个性质 那就是每原创 2017-08-27 12:53:01 · 254 阅读 · 0 评论 -
POJ - 1064 Cable master
Cable master Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 50230 Accepted: 10561 DescriptionInhabitants of the Wonderland have decided to hold a regional programming contest原创 2017-08-19 21:30:12 · 237 阅读 · 0 评论 -
L2-014. 列车调度
#include<bits/stdc++.h>using namespace std;int b[100010];vector<int>ans;int main(){ int n,cnt=0; cin>>n; for(int i=1;i<=n;i++) cin>>b[i]; ans.push_back(b[1]); fo...原创 2018-03-17 20:46:28 · 151 阅读 · 0 评论