莫队的简单应用
Description
有一个长度为n的数组{a1,a2,…,an}。m次询问,每次询问一个区间内最小没有出现过的自然数。
Samples
Input #1
1 | 5 5 |
Output #1
1 | 1 |
Hint
对于30%的数据:1<=n,m<=1000
对于100%的数据:1<=n,m<=200000,0<=ai<=10^9,1<=l<=r<=n
Solution
看到没有强制在线, 第一眼就是莫队/cy
接下来就是考虑怎么写ADD和DEL了, 首先按照惯例记一个当前答案now和每个数的出现次数.
在ADD的时候, 如果这个数之前没有出现过, 那么应该和当前答案now比较一下:
- 如果此数比
now要大, 那么now依然是最优答案, 不必更新 - 如果此数等于
now(显然, 比now小的数是不存在的), 那么应该向上找出一个满足条件的次小值然后更新答案.
DEL就比较简单, 如果被DEL掉的数出现次数变为0, 那么应该和now比较一下, 如果比now小就需要更新了.
Code
1 | /* Headers */ |