低水平選手的自我救贖 (1)CLRS Exercise 16.5-2
阿新 • • 發佈:2018-03-21
時間 mark 郵件 ger 前綴和 統計 題目 class 總結
反例:$A=\{1,2,2\},?n=3$
(我要給 Solution Author 發郵件!)
題目大意
給定正整數 $n$ 和一個由 $m$ 個正整數構成的可重集合 $A$,滿足 $\forall a\in A,?a\le n$ 且 $m\le n$ 。
定義 $N_t(A) = |\{a\in A\colon a\le t\}|$ 。請在 $O(m)$ 的時間內判斷 $\forall t = 0, 2, \dots, n,?N_t(A)\le t$ 是否成立。
多組詢問。
解法
用一個長為 $n$ 的數組 $\mathrm{cnt}[1..n]$ 記錄集合 $A$ 中每個數出現的次數,若存在 $a\in A,?\mathrm{cnt}[a]>a$ 則結論不成立,否則成立。
這解法是錯的。來源
(我要給 Solution Author 發郵件!)
正解在此
對於 $t \ge m$,$N_t(A)\le m \le t$ 自然成立。
只需考慮對 $t < m$ 是否有 $N_t(A)\le t$ 。
統計前綴和判斷一下即可,復雜度 $O(m)$ 。
總結
- 這道題真的沒那麽簡單
- 我的水平確實低(真心的)
- 我要仔細讀讀 CLRS
- 把自己當做小學生!
低水平選手的自我救贖 (1)CLRS Exercise 16.5-2