2017種樹題解

2022-06-26 08:24:08 字數 621 閱讀 2041

每棵樹的費用為 \(cost_i=\sum_^ |x_i-x_k|\)。

由於 \(x_i\) 與 \(x_k\) 的大小關係的存在,我們可以把它分成兩部分:

\(\sum (x_i-x_k) | x_i >= x_k, 1 \le k \le i-1\)

\(\sum (x_k-x_i) | x_i < x_k, 1 \le k \le i-1\)

上面 1 式繼續展開:\(=\sum x_i - \sum x_k = cnt_1\times x_i + \sum x_k | x_i >= x_k, 1 \le k \le i-1\)

上面 2 式繼續展開:\(=\sum x_k - \sum x_i = \sum x_k - cnt_2\times x_i | x_i < x_k, 1 \le k \le i-1\)

因此,我們只要找出上面的 \(cnt_1,cnt_2\) 和兩個sum即可。

很顯然,\(cnt_i\) 就是不大於 \(x_i\) 的數的個數,\(cnt_2\) 類似。

1 式中的 \(\sum x_k\) 是不大於 \(x_i\) 的所有數的和,2 式中的類似。

所以我們可以建線段樹,把 \(x_i\) 加到 \(x_i\),求 cnt 和 sum 即求區間和。

題解 bzoj 2151 種樹

題意 傳送門以下是蒟蒻的做法 建立乙個大根堆a維護最大價值裡面存入它的編號以及價值。聽說配對堆可以不用定義結構體,但我不會呀!l表示這個位置左邊的編號,r同理。乙個陣列book標記是否可以選擇,每次選完之後左右兩邊進行標記,堆中加入左右之和減去本身的值再將其放入原來的位置,即可達到後悔操作,更新左右...

P1250 種樹 題解

題目描述 一條街道的一邊有幾座房子,因為環保原因居民想要在路邊種些樹,路邊的居民被分割成 n 塊,並被編號為 1 n。每塊大小為乙個單位尺寸並最多可種一棵樹。每個居民想在門前種些樹並指定了三個數b,e,t。這三個數分別表示該居民想在b和e之間最少種t棵樹,當然b e,t e b 1,允許居民想種樹的...

題解 種樹(堆)

考試題目叫 so 和這道種樹幾乎差不多 description cyrcyr今天在種樹,他在一條直線上挖了n個坑。這n個坑都可以種樹,但為了保證每一棵樹都有充足的養料,cyrcyr不會在相鄰的兩個坑中種樹。而且由於cyrcyr的樹種不夠,他至多會種k棵樹。假設cyrcyr有某種神能力,能預知自己在某...