有N線性函數$f_i(x)=a_ix+b_i$,$1 \leq i \leq N$。定義$F(x) = \displaystyle\max_i f_i(x)$。輸入$c[i]$, $1 \leq i \leq m$,請計算$\displaystyle\sum^{m}_{i=1}F(c[i])$。
第一行是N與m。接下來有N行,依序每行兩個整數ai與bi,最後一行有m個整數c[1], c[2], …, c[m]。每一行的相鄰數字間以空白隔開。N≤1e5,m≤5e4,輸入整數絕對值不超過1e7,答案不超過1e15。
計算結果。
4 5 -1 0 1 0 -2 -3 2 -3 4 -5 -1 0 2
15
給N個線性函數(一次函數),另外定義F是這些函數的最大值,現在給m個x值,要計算F在這些點的函數值總和,也就是對每一個x值,要計算這些線性函數的最大值。直接的做法全部計算取最大,總共需要O(mn),效率不佳。請看下圖。藍線是這些線性函數,紅線就是F,他必定會形成一個(向下)凸的形狀,而且是一段一段的,每一段都是原來的某個藍線(函數),如果我們可以找出這個紅線,計算這些函數值就沒問題了。我們需要一個觀察:若f與g是兩個線性函數,f的斜率小於g,那麼,在兩線的交點以前是f大,以後是g大。我們可以將這些直線根據斜率排序,然後逐一將直線加入F。這一題另外也有分治的演算法可以做,在後續章節中會再出現。
ID | User | Problem | Subject | Hit | Post Date |
沒有發現任何「解題報告」 |