二分三分
CaprYang
这个作者很懒,什么都没留下…
展开
-
区间交 HDU - 5700 权值线段树 | 树状数组 二分
题解将区间按照左端点排序 最开始将前k-1个区间的右端点加入权值线段数遍历剩下的区间每次把当前区间右端点加入权值线段数并查询倒数第k大的右端点每次遍历的左端点 到 倒数第k大的右端点的区间则为当前最大区间 使用前缀和求区间和AC代码#include <stdio.h>#include <bits/stdc++.h>using namespace std;ty...原创 2018-10-18 16:07:56 · 410 阅读 · 0 评论 -
ACM-ICPC 2018 南京区域赛 D. Country Meow 三分 | 模拟退火
题解题目大意给n个三维坐标系的点,要求找到一个点到达这些点的最远距离最近。三分法:因为答案函数单峰且三个维度的最优解相互独立,所以使用三次三分嵌套求出最优的x、y、z。模拟退火:玄学算法。。随机选取一个点检测是否更优然后更新答案。每次选取的点随着温度的降低与当前最优解的偏移量也降低。由于答案函数单峰所以更容易得到最优解。AC代码三分法:#include <stdio.h>...原创 2019-04-18 21:50:59 · 385 阅读 · 0 评论 -
郑州轻工业大学“CCPC2019-河南省赛”选拔赛(2) 部分题解
题目链接A 火柴棒等式 <暴力>#include <stdio.h>#include <bits/stdc++.h>#define fst first#define sed secondusing namespace std;typedef long long ll; const int INF = 0x3f3f3f3f;const ll L...原创 2019-04-18 21:21:24 · 896 阅读 · 0 评论 -
Codeforces Global Round 2
A. Ilya and a Colorful Walk#include <stdio.h>#include <bits/stdc++.h>#define fst first#define sed secondusing namespace std;typedef long long ll;const int INF = 0x3f3f3f3f;const l...原创 2019-04-09 21:51:28 · 637 阅读 · 0 评论 -
L3-002 特殊堆栈 树状数组 二分 | STL
题解树状数组+二分:使用栈模拟操作。树状数组记录栈内每个数值出现的次数,树状数组用来查询数值1~x的出现次数。二分查找x位置,找到1~x出现次数和为栈内元素数量/2次的位置,则最小的x为当前栈内的中位数。multiset法:维护两个multiset,l和r表示[1, n/2]和[n/2+1, n]大小的元素,保证l内元素<=r内元素,l内元素数量>=r内元素数量,则l最后元素...原创 2019-04-02 23:35:57 · 507 阅读 · 0 评论 -
牛客练习赛40 D 小A与最大子段和 斜率优化 三分
题解枚举每个区间右端点,如果再枚举左端点则复杂度为O(N^2)不可行。使用斜率优化。令s为前缀和,p[i] = ∑(i * s[i]),区间[j, i]以i为右端点时区间和可以表示为p[i] - p[j - 1] - (j - 1) * (s[i] - s[j - 1])。斜率方程(k < j < i) j比k优 为了表示方便j=j-1, k=k-1,((j * s[j] - p...原创 2019-03-08 21:55:30 · 262 阅读 · 0 评论 -
Codeforces Round #540 (Div. 3) D. Coffee and Coursework 二分
题解题目大意,有若干杯咖啡,每杯咖啡有一个收益a[i],不限制每天喝多少杯,但是每天的第k杯收益会减少k-1,问总收益大于n的所需最少天数。使用二分答案求解,每次喝肯定是挑剩余最大的去喝,check时mid天每天都只先喝第一杯如果不够再喝第二杯第三杯。。在喝的过程中如果当前杯的收益小于等于当前所减少的收益则说明答案不可行。AC代码#include <stdio.h>#inc...原创 2019-02-21 23:23:00 · 275 阅读 · 0 评论 -
Educational Codeforces Round 60 (Rated for Div. 2) C. Magic Ship 二分
题解题目大意,一艘船在海上受风力移动,给出每秒的风向,船每秒也可以自己动1格,问到达终点的最短时间使用二分答案求解,check时按照风向走mid次,最后计算所处位置到达终点的曼哈顿距离是否小于mid(表示mid秒船自己移动机会使用最合理的方式安排)。由于答案可能很大直接模拟走mid次会超时,将mid是n的整数倍部分直接移动再将余下的模拟移动。AC代码#include &amp;lt;stdio....原创 2019-02-21 22:11:47 · 265 阅读 · 0 评论 -
find the nth digit HDU - 1597 二分 思维
题解打表计算1+2+3+…+N的所有和 二分查找到第一个小于N的那个和 N减去他接下来就是9个一循环 N = (N - 1) % 9 + 1得到是哪个数字AC代码#include &lt;stdio.h&gt;#include &lt;bits/stdc++.h&gt;using namespace std;typedef long long ll;const int INF =...原创 2018-12-23 20:59:10 · 593 阅读 · 0 评论 -
小新三连(二):小新在努力 ZZULIOJ - 2482 二分
题解水题不做 每次做自身水平+提升上限范围内最大的 即能做出来的最难的题因为数字过多使用二分查找优化 代码直接使用的STL更加方便AC代码#include <stdio.h>#include <bits/stdc++.h>using namespace std;typedef long long ll;const int INF = 0x3f3f3f3f;...原创 2018-12-23 17:34:15 · 724 阅读 · 2 评论 -
Codeforces Round #521 (Div. 3) D. Cutting Out 二分
题解题目大意 给你一个序列 让你找到一个长度为k的序列 在原序列当中出现的次数最多满足单调性 二分出现次数 然后根据出现次数随意输出一个序列AC代码#include &lt;stdio.h&gt;#include &lt;bits/stdc++.h&gt;using namespace std;typedef long long ll;const int INF = 0x3f3f...原创 2018-11-17 01:48:37 · 307 阅读 · 0 评论 -
小P的秘籍 ZZULIOJ - 1523 二分 ST表
题解类似于括号匹配,将K看为1将A看为-1做前缀和记为a。如果某个区间[l, r]合法则a[l - 1]为当前区间内的a的最小值、a[r]为区间内的a最大值。使用单调栈求出两个数组l、r,l表示当前位置向左第一个大于当前a的位置、r表示当前位置向右第一个小于当前a的位置。枚举答案区间的左端点i二分右端点,二分范围为[i, r[i] - 1],右端点如果为r[i]则非法而小于这个值对于从左向右...原创 2019-04-18 22:15:17 · 566 阅读 · 0 评论