数据结构题杂选

news/2024/10/15 20:06:03

不定期更新

Q.

\(n\) 个区间 \(\left [ l,r\right ]\),给每个区间分组,使每个组内的区间两两不交,求最小的组数。

A.

结论:组数 \(k\) 是合法的,当且仅当不存在一个点被所有区间覆盖 \(> k\) 次。

证明:定义两个区间的偏序关系,\(b < c\)\(\left [ a,b\right ]< \left [c,d\right]\)。那么问题等价于最小链覆盖,根据 Dliworth定理最小链覆盖等于最长反链。在反链中的任意两点不存在偏序关系,所以反链中的所有区间交集不为空,因为不存在一个点被覆盖 \(k\) 次,所以最长反链 \(\le k\),即最小链覆盖 \(\le k\)

通过这个结论,我们只需一个支持区间加,全局最大值的数据结构即可。

Q.

给定一个序列 \(a\),支持两种操作:

  1. \(\forall i \in \left[l,r\right],a_i = a_i \oplus x\)
  2. \(\max \limits_{i=l}^{r} a_i\)

A.

因为有异或求最大值,不难想到 01trie,这个东西树套树是维护不了的,于是想到分块套 trie。

具体来说,对于每个块都开一颗 trie。在修改整块时可以直接打上 \(tag\),表示这个块被异或的值,在查询时直接查这个块中与 \(tag\) 异或值最大的即可。而散块可以将这个块的 trie 暴力重构,散块查询暴力即可,时间复杂度 \(O(n \sqrt n \log V)\)

卡常技巧:重构可以在查询的时候再执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/71958.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

开发者门户是什么?为什么企业需要它?

随着企业规模的扩大,其基础设施、服务以及API的复杂性往往增长得更为迅速。在这种增长背景下,了解现有资源并合理利用这些资源变得愈发困难。尤其是当你涉及到外部开发者和第三方应用开发者时,创建一个了解和交互基础设施、服务和API的中央平台能够节省时间并简化入门流程。…

第五周(10.8-

代码题: 1、给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 题解:如果等于nums[middle],返回middle;否则返回left或者low。 2、在排序数组中查找target的开始位置和结束位置。 二分法不可能会漏…

习题2.6

import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 模拟高程数据(假设数据已经过某种方式插值或生成) # 这里我们创建一个简单的40x50网格,并填充随机高程值 x = np.linspace(0, 43.65, 40) y = np.linspace(0, 58…

习题2.7(2)

import numpy as np # 定义系数矩阵A和常数项向量b A = np.array([[2, 3, 1], [1, -2, 4], [3, 8, -2], [4, -1, 9]]) b = np.array([4, -5, 13, -6]) # 使用numpy的lstsq函数求解最小二乘解 # 对于这个特定的问题,由于方程数和未知数数量相同,且没有矛盾,lstsq将…

习题2.4

import numpy as np import matplotlib.pyplot as plt # 定义x的范围 x = np.linspace(-10, 10, 400) # 创建一个2行3列的子图布局 fig, axs = plt.subplots(2, 3, figsize=(12, 8)) # 遍历每个子图 for k, ax in enumerate(axs.flat, start=1): y = k * x**2 + 2*…

习题2.3

import numpy as np import matplotlib.pyplot as plt # 定义x的范围 x = np.linspace(-10, 10, 400) # 创建一个图形和坐标轴 plt.figure(figsize=(10, 6)) ax = plt.gca() # 循环绘制每条曲线 colors = [r, g, b, c, m, y] # 定义颜色列表 for k, color in z…

Redis高级(消息队列)

​消息队列(Message Queue) 1.什么是消息 两台设备(例如服务与服务)之间传递的数据就可以称之为消息 2.什么是消息队列 消息队列是在消息的传输过程中保存消息的容器。 为什么使用消息队列异步例如发送验证码解耦例如服务与服务之间的调用削峰限流一个消息队列的基本组成 生产者…

代码随想录刷题记录 - 字符串

代码随想录刷题记录 - 字符串 1. 反转字符串 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中的所有字符都是 ASCII…