欢迎光临散文网 会员登陆 & 注册

复盘|第328场周赛

2023-01-15 20:30 作者:UCLmsc  | 我要投稿

数组元素和与数字和的绝对差

【遍历】遍历的时候算元素和及数位和。小优化:不用abs,元素和必然大于数位和的和。

子矩阵元素加 1

【二维差分】模板题。二维前缀和:preSum[i] [j] = preSum[i-1] [j] + preSum[i] [j-1] - preSum[i-1] [j-1] + matrix[i] [j]。一维差分: arr 的区间 [l, r] 加一个值 v 等价于将差分数组中的 diff[l] + v,再将 diff[r + 1] - v。差分数组的前缀和相当于原数组。二维差分:以(x1, y1)为左上角,(x2, y2)为右下角的子矩阵中的所有元素加上v: S[x1, y1] += v, S[x2 + 1, y1] -= v, S[x1, y2 + 1] -= v, S[x2 + 1, y2 + 1] += v

统计好子数组的数目

【双指针】用一个哈希表统计滑动窗口内每个元素出现次数cnt = Counter()。枚举右端点nums[right],窗口内每囊括一个nums[right],对数增加cnt[right]对。如果left右移一步,那么使得对数减少cnt[nums[left] - 1对,如果目前的对数pairs - (cnt[nums[left] - 1)仍然≥k,那么可以放心减掉左端点。左端点自身和其左边都可以作为好子数组的左端点,所以每遍历到一个nums[right],ans += left + 1。

最大价值和与最小价值和的差值

【树上DP】最小的一条路径就一个节点,开销等于一条路径减一个节点。路径越大越好,路径两端必然是度数为1的点,类似树的直径。


复盘|第328场周赛的评论 (共 条)

分享到微博请遵守国家法律