随笔分类 -  算法 - 二分

摘要:题意:给定一个排列,每次有两种操作:1 区间降序排列 2 区间升序排列,求 m 才操作后 q 位置上的数字 这道题非常神仙啊. 假如说序列中只有 0,1 的话我们只需要用线段树维护 0,1的个数然后进行区间覆盖即可. 由于所有数互不相同,考虑二分 $q$ 点上的数 $mid$,然后将大于等于 $mi 阅读全文
posted @ 2020-07-05 08:11 EM-LGH 阅读(141) 评论(0) 推荐(0)
摘要:一共有 60 次询问机会,显然可以用 30 次来确定序列的最大值(二分) 然后再用 30 次随机获得 30 个位置的值,那么有 $a_{j}=a_{i}+k\times d$,($d$ 为公差) 那么 $d$ = $gcd(d1,d2,d3,....dn)$,故将 30 个数排序,然后求一下两两之间 阅读全文
posted @ 2020-06-09 14:01 EM-LGH 阅读(163) 评论(0) 推荐(0)
摘要:后缀自动机的做法很显然:建出后缀树,线段树合并,然后倍增的时候更新答案就行. 后缀数组的做法也挺显然:二分答案,然后用主席树判定一下 $[a,b-mid+1]$ 是否有值即可. code: #include <bits/stdc++.h> #define N 200006 #define lson 阅读全文
posted @ 2020-06-03 10:34 EM-LGH 阅读(267) 评论(0) 推荐(0)
摘要:这算是决策单调性入门题吧. 我们很容易发现 $f[i]$ 的转移 $p_{i}$ 满足单调性,然后拿单调队列来维护就行. 对于队列中每个元素维护这个元素转移区间的右端点 新加入一个点的时候和队尾比较一下,看队尾是否会被覆盖,弹掉无用元素. code: #include <bits/stdc++.h> 阅读全文
posted @ 2020-04-02 23:06 EM-LGH 阅读(200) 评论(0) 推荐(0)
摘要:如果 $k$ 值确定的话,我们直接来一个 $O(n)$ 的贪心就行. 那么我们就将 $k$ 分为大于 $B$ 和小于 $B$ 两部分处理. 对于小于 $B$ 的部分,暴力处理,复杂度为 $O(nB)$. 对于大于 $B$ 的部分,取值分别为 $[0,\frac{n}{B}]$ 且依次递减. 那么我们 阅读全文
posted @ 2020-03-04 21:00 EM-LGH 阅读(187) 评论(0) 推荐(0)
摘要:思路很巧妙啊 code: #include <cstdio> #include <cstring> #include <algorithm> #define ll long long #define N 1000009 #define setIO(s) freopen(s".in","r",stdi 阅读全文
posted @ 2020-02-06 16:42 EM-LGH 阅读(211) 评论(0) 推荐(0)
摘要:code: #include <cstdio> #include <algorithm> #define N 50020 #define ll long long #define setIO(s) freopen(s".in","r",stdin) using namespace std; stru 阅读全文
posted @ 2019-12-23 16:44 EM-LGH 阅读(130) 评论(0) 推荐(0)
摘要:code: #include <bits/stdc++.h> #define N 100060 #define M 1000000 #define lson x<<1 #define rson x<<1|1 #define ll long long #define setIO(s) freopen( 阅读全文
posted @ 2019-12-18 10:35 EM-LGH 阅读(187) 评论(0) 推荐(0)
摘要:给一颗树,$1$ 号节点已经被染黑,其余是白的,两个人轮流操作,一开始 $B$ 在 $1$ 号节点,$A$ 选择 $k$ 个点染黑,然后 $B$ 走一步,如果 $B$ 能走到 $A$ 没染的节点则 $B$ 胜,否则当 $A$ 染完全部的点时,$A$ 胜。求能让 $A$ 获胜的最小的 $k$ 我们发现 阅读全文
posted @ 2019-10-31 00:24 EM-LGH 阅读(155) 评论(0) 推荐(0)
摘要:感觉现在写点分治可快了~ 二分答案,就可以将求第 $k$ 大转换成一个判断问题,直接拿点分树判断一下就行了. 阅读全文
posted @ 2019-09-03 20:08 EM-LGH 阅读(209) 评论(0) 推荐(0)
摘要:独立写出来+想出来的,1.5h就切了~ 建立点分树,然后用 $vector$ 暴力存所有子节点,然后二分一下子就可以了. 阅读全文
posted @ 2019-09-02 20:58 EM-LGH 阅读(147) 评论(0) 推荐(0)
摘要:考场上切的,挺简单的~ Code: 阅读全文
posted @ 2019-08-31 13:16 EM-LGH 阅读(142) 评论(0) 推荐(0)
摘要:Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力。 游戏开始前,一 头指定的奶牛会在牛棚后面摆N(1 <= N<= 1,000,000)堆干草,每堆有若干捆,并且没有哪两堆中的草一样多。所 有草堆排成一条直线,从左到右依次按1..N编号,每堆 阅读全文
posted @ 2019-06-17 16:49 EM-LGH 阅读(313) 评论(0) 推荐(0)
摘要:Description 一次舞会有n个男孩和n个女孩。每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞。每个男孩都不会和同一个女孩跳两首(或更多)舞曲。有一些男孩女孩相互喜欢,而其他相互不喜欢(不会“单向喜欢”)。每个男孩最多只愿意和k个不喜欢的女孩跳舞,而每个女孩也最多只愿意和k个不喜欢的男孩跳 阅读全文
posted @ 2019-05-29 14:25 EM-LGH 阅读(181) 评论(0) 推荐(0)
摘要:Code: 阅读全文
posted @ 2019-01-16 22:56 EM-LGH 阅读(178) 评论(0) 推荐(1)
摘要:Code: 阅读全文
posted @ 2018-12-04 18:27 EM-LGH 阅读(156) 评论(0) 推荐(0)
摘要:Code: 阅读全文
posted @ 2018-11-17 10:58 EM-LGH 阅读(255) 评论(0) 推荐(1)
摘要:Code: 阅读全文
posted @ 2018-11-03 14:32 EM-LGH 阅读(153) 评论(0) 推荐(0)
摘要:第一次作交互题,有点不习惯。 由于序列是循环的,我们可以将一半的机会用于判断当前是否是在说谎,另一半的机会用于二分的判断。 对于判断是否实在说谎,用1判断即可。因为不可能有比1还小的数。 本题虽然非常水,却十分有趣。 Code: 阅读全文
posted @ 2018-10-04 16:11 EM-LGH 阅读(181) 评论(0) 推荐(0)