二分
文章平均质量分 50
h_tour
这个作者很懒,什么都没留下…
展开
-
CF 475D.CGCDSSQ ST表 + 二分
题目链接 题意: 给定长度为nnn的正整数序列aaa。 有mmm组询问,每组询问包括一个正整数xxx。 对每个询问计算共有多少个区间[l,r][l,r][l,r],满足al,al+1,…,ara_l,a_{l+1},\dots,a_ral,al+1,…,ar的最大公约数为xxx,即gcd(al,al+1,…,ar)=xgcd(a_l,a_{l+1},\dots,a_r)=xgcd(al,al+1,…,ar)=x。 数据范围: 题解: 1.首先,我们使用STSTST表存储区间之间的最大公约数。原创 2021-08-08 22:24:58 · 141 阅读 · 0 评论 -
PAT 甲级真题 1057 Stack
题目链接 题解: 题目就是求第k小元素问题。由于操作次数比较多,因此直接排序输出中间元素会超时,因此这题要用到第K小元素的经典做法之一,树状数组。用树状数组来维护现在栈内元素的信息,然后使用二分查找中间元素的值。这样时间复杂度是O(nlogn)O(nlogn)O(nlogn)。 实现细节见代码: #include <bits/stdc++.h> using namespace std; const int MAXN = 1e5 + 10; int c[MAXN]; stack<int&g原创 2021-03-08 16:00:43 · 146 阅读 · 0 评论 -
51nod 1257 背包问题 V3
题目链接 二分单位体积的价值,然后判断是否可行。 题意: 给我们n个物品的体积和价值,从中选k件物品,求单位体积的最大价值是多少? 题解: 二分单位体积的价值,然后将原有的物品进行转换排序,选取前k件,判断是否可行。 #include <bits/stdc++.h> using namespace std; const int MAXN = 5e4 + 10; int n, k; int allw, allp; struct Node { int w, p; double pw; }a[M原创 2021-02-24 14:58:38 · 76 阅读 · 0 评论 -
51nod 1287 加农炮
题目链接 二分。 题意: 给我们mmm个地面高度和nnn个炮弹高度,如果一个炮弹高度不大于当前的地面高度a[i]a[i]a[i],那么该炮弹就会停止,同时a[i−1]+1a[i - 1] + 1a[i−1]+1。如果当前的炮弹停在了第一个地面位置或者在最后一个地面位置都没停的话,视为无效炮弹。让我们输出最后每个地面位置的高度。 题解: 我们要把握一个性质,那就是,炮弹只会被第一个比它高的地面iii拦截下来,后面比a[i]a[i]a[i]矮的地面都不可能拦截到导弹,这样,我们可以在输入地面高度时维护一个非严格原创 2021-02-23 16:12:54 · 109 阅读 · 0 评论 -
51nod 第K大的数
题目链接 题意: 题目给了我们数组a和b,然后给了c数组中各个元素是由数组a和b相应元素相乘得到。让我们求出数组c中的第K大元素的值。 题解: 这道题目数组a和b的长度n是5e4,因此直接不能直接求出所有数组c元素的值。 这类求第K大的问题,有时可以使用二分的方法进行求解。 这道题目二分的思路就是,将数组a和数组b进行排序,首先二分这个第K大元素的值mid,然后在check函数当中,对数组a的每个元素二分找到与a[i]相乘大于mid的最小的b[j],那么显然b[j]之后的所有数组b的元素与a[i]相乘都会大原创 2021-02-22 20:40:45 · 92 阅读 · 0 评论