随笔分类 - 基础算法 - two-pointers
摘要:题目大意:给定一个长度为 N 的序列,求序列中最大值和最小值相差小于 K 的连续段的个数。 题解: 最大值和最小值相差不超过 K 是一个在值域角度的限制,应考虑采用平衡树或权值...数据结构进行维护。 连续的一段即可考虑采用双指针进行维护即可。 注意: r 是 当前需要判断 的情况,故 r 从 1
阅读全文
摘要:题目大意:给定一棵 N 个节点的无根树,边有边权,现生成一个序列 d,d[i] 表示 i 号节点到树上其他节点距离的最大值。给定一个 m,求 d 序列中最大值和最小值之差不超过 m 的最长连续段的长度是多少。 题解:d[i] 直接两次 dfs 即可,考虑如何求出最长连续段。可以发现若当前 [l,r]
阅读全文
摘要:题目大意:给定一个长度为 N 的序列,求是否能够从序列中选出一个集合,使得这个集合按照特定的顺序排成一个环后,环上相邻的点之间的权值差的绝对值不超过 1。 题解:集合问题与序列顺序无关,因此可以先将序列排序。 可以发现,题目中描述的环,拆成序列之后应该满足 $a_l,a_{l+1},...,a_{r
阅读全文
摘要:题目大意:给定一个 N 个点的序列,求有多少个区间满足$\oplus_{i=l}^ra[i]=\sum\limits_{i=l}^ra[i]$。 题解: 小结论:$a\oplus b=a+b\rightarrow a\&b=0$。 对每个点来说,考虑向右延伸能够满足条件的右端点的位置,显然右端点的位
阅读全文
摘要:题目大意:给定 N 个数字组成的序列,求刚好拥有所有 M 种数字的最短区间。 题解:双指针算法是一种对于暴力的优化算法,对于这道题来说,一个显然的暴力是:对于序列中每一个位置 pos,计算出这个位置右边恰好满足条件的位置 f[pos],时间复杂度为 $O(n^2)$。考虑对于每一个位置的计算位置,计
阅读全文
摘要:题目大意:给定一个有 N 个正整数的序列,求出此序列满足和大于等于 S 的长度最短连续子序列。 cpp include include using namespace std; const int maxn=1e5+10; int n,s,a[maxn]; void read_and_parse()
阅读全文

浙公网安备 33010602011771号