问题描述: 蒜头君有一个长度为 n 的序列 a1,a2,⋯,an,现在他有 m 个问题要问你,每次给你一对 1≤l≤r≤n ,求 al,a(l+1),⋯,ar 的 mex 的值。 mex 的值定义为该...
时间: 2024-03-19 14:40:19 浏览: 73
动态规划问题-最长单调递增子序列问题
好的,我明白了。这是一个关于序列的问题,每次给你一个区间,需要求出该区间中未出现的最小非负整数,也就是 mex 值。我可以给你一个 O(mnlogn) 的暴力算法,但是时间复杂度太高,无法通过本题。下面是一个时间复杂度更优的做法:
首先,我们可以将所有询问按照右端点从小到大排序,这样做的目的是为了保证每个数只会被插入一次并且只会被删除一次,从而避免重复计算。
接着,我们使用一个 set 或者 unordered_set 来维护当前区间中出现的数,同时记录当前区间的左端点 l 和当前的 mex 值 mex,初始时 l=1,mex=0。
对于每个询问 [l,r],我们先将 l 不断右移,直到当前的 set 中不包含 a_l,然后将 a_l 插入 set 中,此时 set 中的元素就对应了区间 [l,r] 中出现的数。然后不断将 mex 右移,直到 set 中不包含 mex,此时 mex 就是区间 [l,r] 的 mex 值。最后将 l 左移一位,将 a_l 从 set 中删除,准备处理下一个询问。
这个算法的时间复杂度是 O(nlogn+mlogm),空间复杂度是 O(n),可以通过本题。
阅读全文