樹狀數(shù)組求逆序對 樹狀數(shù)組的幾種用法?
樹狀數(shù)組的幾種用法?假設數(shù)組的長度為n,線段樹和樹數(shù)組的基本功能是在滿足約束律的一定運算(如加法、乘法、最大值、最小值)下,修改單個元素,并在o(logn)時間復雜度內(nèi)保持區(qū)間信息。不同的是樹數(shù)組只能
樹狀數(shù)組的幾種用法?
假設數(shù)組的長度為n,線段樹和樹數(shù)組的基本功能是在滿足約束律的一定運算(如加法、乘法、最大值、最小值)下,修改單個元素,并在o(logn)時間復雜度內(nèi)保持區(qū)間信息。不同的是樹數(shù)組只能維護前綴“運算和”(前綴和、前綴積、前綴max min),而段樹可以維護區(qū)間運算和。但有些運算有逆元素,這給人一種錯覺,認為樹數(shù)組可以保持區(qū)間信息:保持區(qū)間和、模素數(shù)意義上的區(qū)間積、區(qū)間異或和。這樣做的實質是取右端點的前綴和,然后對左端點的前綴和的逆做一個操作,所以樹數(shù)組的區(qū)間查詢實際上是兩個前綴和查詢。可見樹數(shù)組可以保留某些運算的區(qū)間信息,但不能保留其它運算的區(qū)間信息:Max/min值,模非素數(shù)意義下的乘法,因為這些運算中沒有逆元素,所以不能使用兩個前綴的和。但是片段樹是不同的。分段樹直接維護區(qū)間信息,所有滿足組合規(guī)則的操作都可以維護區(qū)間和,而懶標記的存在也使得分段樹支持區(qū)間修改,這是樹數(shù)組所不能做到的。可以說樹數(shù)組所能做的實際上是線段樹的子集。在大多數(shù)情況下,真正使用樹數(shù)組僅僅是因為它易于編寫,而且它的常量很小。然而,隨著zkw段樹的流行,樹數(shù)組僅有的兩個優(yōu)點已經(jīng)不復存在了,我想這將是一個巨大的挑戰(zhàn)。興趣相關:弱省、弱校、弱菜。我們只能討論一些基本功能。請不要在這個答案中談論樹數(shù)組的高級用法,因為我真的還沒有學會
算法,其實就是解決問題的方法。學習算法是學習前人解決問題的方法。為什么要學習算法?想要在編程道路上走得更遠的程序員可能需要學習算法。我記得在軟件工程中,程序是數(shù)據(jù)結構算法,這說明了算法對程序的重要性。
許多初級業(yè)務系統(tǒng)程序員可能不會使用很多數(shù)學公式,但這并不意味著他們不使用算法。算法代表了數(shù)學對于計算機的重要性,對于圖形和圖像、人工智能等方面來說,數(shù)學基礎不好,不懂的算法可以說是很難的。
即使你不是程序員,你也應該學習更多關于算法的知識。一方面有助于思維訓練,另一方面也有助于解決生活中的實際問題。例如:用矩陣解方程。
每個人學習算法的目的可能不同,但算法對學習者的實際好處是相同的。