P4396 [AHOI2013]作业 题解
一道莫队好题。
我们需要考虑的是如何去统计一个区间内的符合题意的答案。
这里有两种做法:
做法一:树状数组/线段树。
我们可以开一个值域树状数组/值域线段树,在每一次莫队增/删的时候我们在对应位置进行单点修改操作,维护一下一个区间内的数的个数以及不同数的个数。
最后统计答案的时候,进行一次区间查找操作。
时间复杂度分析(不计预处理复杂度):
莫队转移复杂度是 ,其中块长是 ,块数是 ,在转移过程中线段树单点修改和区间查询复杂度都是 ,因此总复杂度是 。
由于 同阶,上述复杂度可以记为 。
做法二:
发现上述做法对于修改操作和查询操作复杂度是一样的,都是 。
但是显然查询复杂度 远小于转移复杂度 ,因此我们可以考虑使用一种奇怪的数据结构使得其能够 修改, 修改。
这里就有一种数据结构叫做值域分块。
对于修改操作,我们直接在对应位置上修改,复杂度 。
查询的时候,我们进行一次区间查询,复杂度 , 是值域。
时间复杂度分析:
转移操作总复杂度是 ,修改操作 。
查询操作总复杂度是 ,单次查询 。
因此总复杂度是 。
由于 同阶,上述复杂度可以简记为 ,发现比做法一少了一个 。
作者采用的是第二种做法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具