竞赛讨论区 > 【每日一题】9月16日题目精讲-Closest Equals

【每日一题】9月16日题目精讲-Closest Equals

头像
王清楚
编辑于 2020-09-16 14:28:52 APP内打开
赞 0 | 收藏 0 | 回复4 | 浏览309

题号 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之前写的题解有获得牛币资格~

.牛币兑换中心

牛客博客开通方式

  1. 如何开通牛客博客:https://www.nowcoder.com/discuss/202952
  2. 如何使用博客搬家功能:进入博客--->设置--->底部博客搬家
  3. 如果你对牛客博客有任何意见或建议:牛客博客意见反馈专贴

4条回帖

回帖
加载中...
话题 回帖

本文相关内容

近期热帖

等你来战

查看全部

热门推荐