最後一定是若干段全都手動開啟的電腦,每一段中間有一台自動開啟的電腦。
將 一台自動開啟-一段手動開啟 視作一整段,則長度為 \(l\) 的一段方案數是 \(2^\)(先隨意開啟一台電腦,之後只能選擇向左或向右拓展)。
寫成生成函式後二項式展開即可,時間複雜度 \(o(n^2)\)。(式子不見了)
考慮對每乙個元素 \(a_i\) 計算貢獻。
設 \(x\) 為最後乙個大於 \(a_i\) 的 \(a\) 下標,則符合條件的上公升序列可以分為兩段:\([1,i]\) 中以 \(i\) 為結尾的上公升子串行 及 \([i,x)\) 中以 \(i\) 為開頭的上公升子串行。
前者很好算,後者則是 \([i,n]\) 中以 \(i\) 為開頭的上公升子串行個數 減去 \([i,x]\) 中以 \(i\) 為開頭,\(x\) 為結尾的上公升子串行個數。
考慮列舉每乙個 \(x\)。符合條件的 \(x\) 一定滿足其等於字尾 \(\max\)。那麼對應的 \(i\) 一定在這個 \(x\) 到下乙個 \(x\) 之間,直接抽取出來做即可。
時間複雜度 \(o(n \log n)\)。
codeforces 簡單計數問題收集
開個新坑。所謂簡單計數問題,就是運用組合數學或者一些計數技巧,去統計某個物件的個數。這些題往往碼量不大,思路靈活。如果這方面的 直覺 很強的話,解題會很輕鬆。容易想到的是,給定乙個區間,在 nlogn 內求出其 good pairs 的計數。即對 first 維護 i rev i 的個數。然後列舉 ...
CodeForces 816B(區間計數)
codeforces 816b 題意 給出n個區間和乙個k值,再給出q次詢問,每次詢問給出乙個區間,要求這個區間中的數在開始的n區間中出現次數不少於k次的數目。解法 將n個區間的每個數每出現一次就加一,最後統計q詢問的區間中不小於k的數的個數。寫這題主要是想講乙個常用的區間更新的方法,其實這題也可以...
組合計數 CodeForces 888D
題意 分析 對於乙個給定數列,求滿足 ai i 的元素個數不少於 n k 個的數列的個數。換句話說,就是求最多有 k 個元素不滿足 ai i 的數列有幾個。分析一下用排列數得出一下結論 k 1 時,ans 1 k 2 時,ans 1 c 2,n k 3 時 ans 1 c 2,n c 3,n 2 其...