题号 NC110867
名称 Closest Equals
来源 CF522D
戳我进入往期每日一题汇总贴~
往期每日一题二期题单
如果你在题库做题时遇到了喜欢的题目,欢迎推荐给邓老师~ 点击查看详情
题解
题意:对一个序列有m组询问,每次询问区间[l,r]内两个相同的数的最近距离是多少。
对于每个元素,我们可以先求出上一个和他一样的数的出现位置记为pre[i]。然后每次查询的时候,查询的是[l,r]区间内pre[i]大于等于l的i-pre[i]的最小值——那么要怎么把pre[i]小于l的点排除在查询外?
将询问离线,按照询问区间的右端点从左到右排序。从左到右扫描,对于每一个i和pre[i]只对l在pre[i]左边的区间有贡献,所以把线段树/树状数组里面pre[i]位置的值改为i-pre[i]即可。然后在扫描中查询区间最小值即可。
也就是说:离线了询问之后,我们每次是把i小于等于r的i和pre[i]纳入了考虑范围,并且因为是按照pre[i]往线段树/数组里面放,这样,查询pre[i]在[l,r]区间内的i-pre[i]的最小值既保证了i在[l,r]范围内也保证了pre[i]在[l,r]范围内。
欢迎各位大佬来做题写题解,也欢迎大家踊跃在当日讨论贴中提问!
活动奖励:
在牛客博客中写出题解,并回复地址
审核通过可获得(依据题目难度和题解的内容而定)
本道题目9月23日中午12:00之前写的题解有获得牛币资格~
牛客博客开通方式
- 如何开通牛客博客:https://www.nowcoder.com/discuss/202952
- 如何使用博客搬家功能:进入博客--->设置--->底部博客搬家
- 如果你对牛客博客有任何意见或建议:牛客博客意见反馈专贴
全部评论
(5) 回帖