easy tea,不过有点小作弊:想完以后看了 Asm.Def 学长的评论才确定自己的思路是对的,并不是很自信。
考虑转化题意,求最多的说真话的人。
注意到如果有 $a_i$ 个人比 $i$ 低,有 $b_i$ 个人比 $i$ 高,说明 $i$ 的成绩排名 $\in [a_i+1,n-b_i]$。
将区间视作一条线段,然后把 $[l,r]$ 相同的线段合并,给 $[l,r]$ 这条线段赋权。本题就转化为了最大线段带权覆盖问题。$\rm dp + std::map$ 可以 $\mathcal O(n\log n)$ 地解决这个问题。
小陷阱:如果有超过 $r-l+1$ 个人的成绩排名 $\in [l,r]$,那么 $[l,r]$ 的权值为 $r-l+1$,$\rm dp$ 的时候取 $\rm min$ 判断一下就好了。