1.17 CW 模拟赛 T2. 艺术家
前言#
更重要的是研究这题的部分分, 赛时居然可以做到
发现以前一直用的大标题很碍眼, 改了, 下课把之前的格式也改一下
思路#
暴力#
容易模拟, 做到
特殊性质 #
思路#
你发现每一个区间都是其后面区间的前缀, 而且每次长度只增加
容易注意到一个特殊性质区间答案单调递增
怎么处理
容易想到类似单指针的做法, 你维护已经有答案的区间前缀, 之后就是对于没有答案的区间的处理
问题在于如果修改到了已经有答案的区间前缀中, 会导致后面的答案出现问题, 如果要维护会导致复杂度出现问题
好吧仔细想一下容易发现, 你记录前缀中出现过的颜色, 然后一般的维护颜色的种类数, 然后你在扩展的时候处理即可
刚刚脑子糊了, 赛时脑子也糊了
没有按照正确顺序思考 + 脑子内存不足导致的
总结#
注意这类区间不重问题的常见实现方式, 避免了更高复杂度的枚举
特殊性质 #
思路#
容易想到的是每次修改只修改包含他的区间, 问题出在怎么计算每个点被哪些区间包含, 以及如何维护每个区间的合法性?
计算每个点被哪些区间包含是简单的, 复杂度被限制在线性, 约束还是很强的
维护区间合法性显然不能使用上面的方法了, 空间开不下
不过你可以考虑根号分治, 对于
容易证明这样子做的时空复杂度都符合要求
听了讲发现直接用
考虑长度为
考虑一共只有
对应的最大
发现理论上是过不去的, 随机数据是这样的, 一会去问一下
好像别人不是这个意思, 不管了
哦哦哦, 听懂了,
就当我上面这一坨都没说
总结#
思路还是挺好想的, 难的是维护
灵机一动想到了根号分治, 本质上其实是空间复杂度跟个数有关, 时间复杂度跟长度有关联想到的经典应用
时空复杂度也可以用根分处理
特殊性质 #
思路#
可以发现一个区间如果在某一时刻区间内部颜色互不相同则之后永远内部颜色互不相同, 而且只要对于一个
的区间, 操作次数达到 就可以保证其内部颜色不相同
怎么用?
考虑主席树维护版本再二分版本,
总结#
一类线段树的常见用法
正解#
思路#
看到包含和不相交其实很容易想到在图上处理
你发现直接丢到图上还不够, 包含关系是有传递性的, 可以搞成一棵树
发现建出树之后, 叶子结点区间之间无交集, 父亲节点一定比其儿子节点后满足要求, 特殊的, 不同树之间显然无交集
发现修改的一个点只会在一个区间之中, 于是我们先考虑怎么判断这个区间是否合法了
方法
发现相当于建出树之后进行单点修改, 子树数颜色,
不研究了
方法
维护每个颜色在原序列上对应的链, 区间内部颜色互不相同就是这一位置上对应的颜色的链的上一位在区间外面
考虑维护, 直接维护
主要问题是对链的维护
然后就是怎么维护树
首先建树怎么建?
疑似可以用栈
其次怎么维护叶子结点?
疑似可以用
好好好, 滚回来看
基础操作#
处理链表
对于原序列直接处理即可, 顺带把最初的
建树
考虑最终树的结构, 应当是父亲节点完全覆盖其儿子节点
我们首先将
- 一定是后面的区间为前面的区间的儿子
- 建树一定是先处理完上层再处理下层
最重要的是, 你排出来恰好就是树的形式, 简单用栈处理即可
具体的, 每次找到前面第一个满足其
找叶子结点
容易的, 记录入度之后直接做
修改#
处理链表
直接修改链表顺带维护
找当前区间
在当前的叶子结点集合中找到覆盖
总结#
包含关系可以用树来表示
纯纯的码力战神题, 拼尽全力无法战胜
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!