CF1601D 题解
题意
\(n\) 个人去爬山,初始攀爬难度为 \(d\)。每位登山者有两个属性:技巧 \(s\) 和整洁度 \(a\)。如果登山者的 \(s \ge d\),则可以登上。登上后 \(d=max(d,a)\)。求最多有多少人能登上。
\(1 \le n \le 5 \times 10^5,0 \le d \le 10^9\)
题解
神仙贪心题。
首先所有人可以分成两部分:\(s_i \ge a_i\) 的集合 \(S\),这部分互不影响,排序即可;\(s_i < a_i\) 的集合 \(T\),可以按照 \(a\) 排序贪心解决。接下来还要考虑 \(S\) 与 \(T\) 之间的影响。
对于 \(i \in S,j \in T\),若 \(s_j < a_i \le s_i < a_j\),那么 \(i,j\) 不能同时取。否则一定有最优方案能够尽可能多取。细索,这种最优方案可以归纳为:若 \(s_i < a_j\),先取 \(i\);若 \(s_i>a_j\),先取 \(j\)。若 \(s_i = a_j\),先取 \(j\)。
综合上面三种贪心,发现可以用以 \(max(a_i,s_i)\) 为第一关键字升序, \(s_i\) 为第二关键字升序的排序概括。至此问题解决。