毒瘤題 “L2-047 錦標(biāo)賽” 解法

一個(gè)四不像的解法。
輸入給出的是兩兩比較之后“余留”下來(lái)的結(jié)點(diǎn),假如我們把這些“余留”下來(lái)的結(jié)點(diǎn)從葉子向根遞推,當(dāng)訪問(wèn)到某個(gè)結(jié)點(diǎn)時(shí),可以考慮三種情況:
第一種,該結(jié)點(diǎn)比其中一棵子樹(shù)的最大值小,比另一棵子樹(shù)的最大值大。我們知道有一個(gè)更大的結(jié)點(diǎn)通過(guò)了這里,所以才余留了當(dāng)前這個(gè)結(jié)點(diǎn),更大的結(jié)點(diǎn)一定來(lái)自大子樹(shù),當(dāng)前的結(jié)點(diǎn)一定來(lái)自小子樹(shù)。
(更大的結(jié)點(diǎn)一定來(lái)自大子樹(shù),當(dāng)前的結(jié)點(diǎn)一定來(lái)自小子樹(shù),因?yàn)榇笞訕?shù)中的某處曾“余留”了一個(gè)比當(dāng)前結(jié)點(diǎn)大的點(diǎn),假設(shè)當(dāng)前的結(jié)點(diǎn)來(lái)自大子樹(shù),那么它不可能現(xiàn)在才被“余留”。)

第二種,該結(jié)點(diǎn)比任意哪棵子樹(shù)的最大值大,我們可以假定它來(lái)自其中任意一棵子樹(shù),那么通過(guò)此處的更大的結(jié)點(diǎn)就是來(lái)自另一棵子樹(shù)。
(當(dāng)前結(jié)點(diǎn)與它的兩棵子樹(shù),對(duì)于后續(xù)的結(jié)點(diǎn)來(lái)說(shuō),又是一棵子樹(shù),遞歸地來(lái)看,這種思路仍然可以成立)

第三種,該結(jié)點(diǎn)比任意哪棵子樹(shù)的最大值小,它不可能來(lái)自任意哪顆子樹(shù),因此是"No Solution"。

對(duì)于子樹(shù)最大值的計(jì)算,我們?nèi)菀字肋f推式為:
根據(jù)當(dāng)前結(jié)點(diǎn),推出它在答案數(shù)組中可放的區(qū)間:
(假定k為葉子所在的最底層,i為當(dāng)前層,j為當(dāng)前層的第幾個(gè)結(jié)點(diǎn))
1,當(dāng)前結(jié)點(diǎn)來(lái)自它的左子樹(shù):
[?(2?* j) * (1 << k - i - 1),?(2 * j + 1) * (1 << k - i - 1)?) (左閉右開(kāi))
2,當(dāng)前結(jié)點(diǎn)來(lái)自它的右子樹(shù):
[?(2 * j + 1) * (1 << k - i - 1),?(2 * j + 2) * (1 << k - i - 1)?)(左閉右開(kāi))
總體代碼: