今天中午,學習了樹狀陣列,從 我看的這些知識點,題目來說,樹狀陣列是用來求數列的和,順序,逆序,數列中資料的刪除和新增。數列的和包括全部的和,還有一段和,這些都可以用樹狀陣列實現,其實累加陣列也可以實現,但是累加陣列在實現資料新增,刪除時就不行了,由於樹狀陣列本身儲存就是一段一段的,所以當修改資料時還是比較快的,至少比累加和的陣列快,當求逆序時,陣列裡存一,表示有乙個數,每次更新陣列時,都要進行檢驗,是否是順序,就是用樹狀陣列中最大的位置減去剛更新的位置,如果剛更新的位置的數字是順序的話,它的值應該和最大的位置的數是一樣,因為目前在這個樹狀陣列中,剛更新的位置,就是最大的,否則,則不一樣大。當,求順序的對數時,只需要累加,更新的樹狀陣列即可,因為,它記錄的數字,是在它前面數字的數量多少,也是增加了它之後,順序對數增加的數量,依次累加,就會得到總共的順序對數。
一般,樹狀陣列有----單點更新,區間求和。----區間更新,單點求值。---區間更新,區間求和。三部分,其中第三點可以用線段樹做,第三點也是第一點和第二點的綜合應用。第一點時最基本的操作,就是用更新函式,更新乙個點,更新完之後,在它之後的整個樹狀陣列也都更新完了,然後直接求和就可以了。第二點,更新區間可以轉換為更新兩個點,若要把區間 i 到 j 的值都增加1。可以把樹狀陣列的 i 位置增加1,在樹狀陣列的 j 的下乙個位置減去1,這樣在區間 i 到 j上就增加了一,但這個陣列已經不代表原來的意義了,因為很多地方已經不符合它的規則了,已經失效了。第三點,是由前面兩部分組成,所求和如果都是從一開始,區間更新,用第二點更新了,但是還要用乙個陣列儲存區間增加的數值,那要求區間和的時候,和就包含兩部分,一部分是原來序列的和,第二部分是增加的那一部分的和,當然第二部分和需要兩個樹狀陣列來求,因為用第二點區間更新,是求不出區間和的,需要(增加部分)乘(區間包含的增加了得資料的數量),要求這部分就需要兩個樹狀陣列。
求這一部分的過程,總和=原來陣列和+增加的和。(假設從1開始到x求和)。
如果用c[ k ]來代表k增加的那部分,那麼增加的和c[ 1 ]*(x)+c[ 2 ]*(x-1)+c[ 3 ]*(x-2)+.........c[ k ]*(x-k+1);
增加的和=c[ k]*(x+1)-c[k]*k;
這個和就可以用兩個樹狀陣列分別儲存c[ k]的值和c[k]*k的值。
如果原來的陣列和用b陣列求累加和得到,那麼最後的sum[x]=b[x]+c[ k]*(x+1)-c[k]*k;(這是1到x的和);
以上內容都是學習自其他人的部落格和題解。
看完了樹狀陣列的知識點並讀懂老師說的題後,還做了一道題,感覺還可以。下午的比賽,當時看了第一題,感覺是bfs()會做,但是寫出來就是不對,這個很尷尬。e這個題,也是一看就是最大生成樹,打出**,就是過不了,看來練得還是少啊,最後發現**確實有問題,前幾個還有最短路徑的題,因為最短路徑用佛洛依德做的多,所以看了時間限制,沒敢寫,得把和prim演算法差不多的最短路徑好好練一練,這樣練熟了一種題,兩類題都可以用了。
做題做的腦子疼,好好休息休息。qaq、
四書之《論語》學習日記14
君子之於天下也,無適也,無莫也,義之與比。為什麼儒總讓人想到迂腐呢?孔夫子不是告訴我們要會變通的嗎?君子懷德,小人懷土 君子懷刑,小人懷惠。白話文解釋裡的經典註解 君子想的是道德法律,小人卻一心想看 三畝地,二頭牛,老婆 孩子 熱炕頭 其實,想著老婆孩子熱炕頭原本也不錯,關鍵是要注意如下兩個方面的問...
2023年2月14日學習日記
今天也做了stl的題,還是覺得好難好難。我還是不是很會用stl解決問題,老是習慣用普通方法解。今天改了好久還是沒把 f 改出來,不知道為什麼,f 明明和 v 是差不多一樣的思路,感覺改改 v 的 就可以過了,可就是過不了。再就是 h 這道題,改的我頭大,就是乙個全排列的問題,而且只有四個數,感覺用普...
棒棒團前端學習日記 丨 第14天
加入棒棒團自學前端的第14天,今天的學習日記有以下內容 一 複習學過的知識 學習前端工作流 自動化流程工具使用 源 版本控制 依賴項管理工具 專案模板腳手架。學習流行框架 學習angular基本使用 學習angular高階特性 學習vuejs基本入門和路由。學習模組開發 模組開發規範 常用的模組開發...