直接按照题目要求模拟即可,相邻绝对值不超过500遍历判断一下即可,对于除了通过题目的最小值,我们可以通过set维护当前的所有题目,key可以是一个当前题目的难度和下标的pair。
对于通过的题目可以先将其从set中移除,然后直接拿set的最小值和通过题目的难度最大值做对比即可。注意每个人得出是否成绩异常的结果后,通过的题目还需要再加回到set中。
时间复杂度:O(nlogn)
小红是一位资深的程序员,他最近受邀担任一场编程比赛的评判员。该比赛共有 n 道题目,第 i 道题目的难度为 ai。一共有 m 名参赛选手,第 j 名选手通过了 bj 道题目,通过题目的顺序记录在数组 Cj 中。
小红根据以下两条规则判断一名选手的成绩是否异常:
小红希望你能帮助他计算出有多少名选手的成绩异常。
第一行包含两个正整数 n 和 r,分别表示题目数量和判断成绩异常的参数 500。
第二行包含 n 个正整数 a1,a2,…,an,表示每道题目的难度,保证数组 a 是非降序的。
第三行包含一个正整数 m,表示参赛选手的数量。
接下来有 m 组数据,每组数据描述一名选手的信息:
输出一个整数,表示成绩异常的选手数量。
3 2
800 1200 3500
5
2
1 3
3
3 2 1
3
1 3 2
3
1 2 3
1
2
2
第 1 名选手通过了难度为 3500 的题目,但没有通过难度小于等于 3000 的题目,成绩异常。
第 3 名选手相邻通过题目的难度之差为 ∣1200−800∣=400<500 且 ∣3500−1200∣=2300>500,成绩异常。
第 2、4、5 名选手的成绩均未出现异常。
对于所有评测用例,满足 $1 \leq n \leq 10^5, 1 \leq a_i \leq 4 \times 10^9, 1 \leq m \leq 10^5, 1 \leq b_j \leq n, b_j < 2 \times 10^5$。