20220401刷題日記

2022-10-09 10:48:10 字數 706 閱讀 2459

乙個實現技巧是,如果當前的比原先的優秀,那麼我們直接交換兩個值即可,帶著那個較小的繼續往下做。正確性:如果原先的那個較小的已經往下做過了,正確性顯然,乙個在這個區間內的點,顯然我們新加進去的也會被考慮可能是答案,如果原先的沒有往下做,我們就需要往下去遞迴以保證正確性。如果沒有往下的話,那麼就好像交換了插入順序一樣的。

用李超線段樹實現即可。

寫了乙個cdq分治的斜率優化,但是被卡進度了,不得已只得去學李超樹。寫完李超樹就過了。

\(f_i=a_ix_i+b_iy_i\) 的形式,我們兩邊都除以 \(b_i\) 就化成典型斜率優化形式了,不難發現也滿足李超樹的形式,兩個 \(log\) 可以過。

非常好的構造,首先考慮 \(n\) 是偶數一定有解,如果 \(n\) 是奇數,考慮可以劃分問題,因為 \(a_i=\frac\) 一定是填滿的,且不可能有相鄰,我們考慮這樣的乙個子矩形,兩邊都是滿的,如果中間長度是奇數,直接和偶數一樣,黑白染色即可,我們重點討論長度是偶數的情況。

我們對整個矩形黑白染色,顯然左邊全部佔的是黑格,右邊全部佔的是白格,而我們期望在從左往右填的時候白格的個數會盡可能的多。顯然,第 \(i\) 列白格里的填的個數是這一列白格的個數減去前面填的黑格的個數,也就是減去前面填的總數,加上填的白格的個數。

然後我們考慮盡可能的靠近這個上界,不難發現,首先從下往上填白的,然後從上往下填黑的,就是正確的。

這也是出題人的做法

卡著上界填還不行的話,就真的不行了。

leetcode 刷題日記

將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。採用乙個帶頭節點的指標head鏈結合併後的新指標,乙個空指標pre進行迴圈載入兩個鍊錶中的節點比較兩個鍊錶節點的值,pre指標鏈結較小值的鍊錶的節點,依次遍歷兩個鍊錶,直到乙個為空停止迴圈。複雜度分析 時間複...

leetcode 刷題日記

題目 給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。解題思路 按照最長鍊錶的長度遍歷兩個...

leetcode刷題日記

給你兩個陣列,arr1 和 arr2,arr2 中的元素各不相同 arr2 中的每個元素都出現在 arr1 中 對 arr1 中的元素進行排序,使 arr1 中項的相對順序和 arr2 中的相對順序相同。未在 arr2 現過的元素需要按照公升序放在 arr1 的末尾。示例 輸入 arr1 2,3,1...