1. 程式人生 > >【2018.10.20】noip模擬賽Day3 二階和

【2018.10.20】noip模擬賽Day3 二階和

今年BJ省選某題的弱化版……

這看起來就沒那麼難了,有幾種方法維護,這裡提兩種。

一種是維護 一維&二維字首和。

對於一個長度為$m$的序列$b_1,b_2,...,b_m$,

由於 二維字首和$=b_1*m+b_2*(m-1)+...+b_m*1$,

每一項都和$m$有關係,而$m$可以是任意子區間的長度,於是很不好維護。

我們可以解除這些數與$m$的關係,最簡單的方法就是把它們反過來維護。

我們已經維護了一維字首和(即$b_1 to b_m$的和),

所以我們可以反過來維護 $b_1*0+b_2*1+...+b_m*(m-1)$ 的和,二維字首和就是$(b_1+b_2+...+b_m)*m-b_1*0+b_2*1+...+b_m*(m-1)$。

這樣就有一個全域性維護的方法能夠解除每個數與$m$的直接關係,而只跟每個數本身的位置$-1$有關係,即線段樹維護每個區間$[l,r]$的一維字首和 $b_l+b_{l+1}+...+b_r$ 與二維字首和 $b_l*(l-1)+b_2*l+...+b_m*(r-1)$。

然後我還寫了對拍,包括最終測評資料在內,所有$n,m\le 5000$的資料都過了……我沒理解啊……

因為測了大資料$n,m=100000$後我就WA上天了(基本上沒有跟標答一致的輸出)。

後來浪費時間查了好久,發現增加線段樹上的二維字首和時,