演算法訓練 第五日日記

2021-10-17 15:53:24 字數 865 閱讀 3596

(對於乙個數,想將它乘以二就將其左移一位,再想加一就|1)

對於乙個陣列(大小為n),我們可以通過乙個線段樹陣列(大小約為4n),用來儲存其某段區間的資訊,例如最大值,區間和。

通常會有build函式,用來建造線段樹。

void

build

(int l,

int r,

int i)

int mid =

(l + r)

>>1;

build

(l, mid,i<<1)

;build

(mid +

1, r, i <<1|

1);pushup

(i);

}

modify函式,修改區間資訊。

void

modify

(int ji,

int shu,

int i)

int mid = tree[i]

.left + tree[i]

.right >>1;

if(ji <= mid)

modify

(ji, shu, i <<1)

;else

modify

(ji, shu, i <<1|

1);pushup

(i);

}

query函式,返回區間資訊。

int

query

(int l,

int r,

int i)

經典例題:修改單點資訊,hdu-1166、最大區間和,spoj - gss1

演算法訓練 第四日日記

bfs 從起點開始,逐步向外擴散,擴散的過程中將點入佇列。矩陣迷宮尋終點問題 poj 2251 從二維到三維的過程 dfs 從某點開始,按照邊不斷遞迴搜尋下乙個點 n皇后問題 二分圖染色 對於一張圖,如果可以把點分配成兩派,某一派中,點之間沒有關係,只存在派與派之間的關係,因此,在搜尋中,可以將某一...

4月8日,日記

今天4月8日,又是乙個週末。天氣不錯,氣溫比較高,最高溫度有27 週末待在家裡,早上睡個懶覺,上上網,聽聽 也是一件很愜意的事情。最近上班在忙著寫乙個壽險業務系統的概括的手冊。今年剛上班的時候就開始寫了,拖拖拉拉到現在還沒有寫好。這個文件,也算是自己在壽險行業工作這麼多年,對壽險業務系統認識的乙個總...

ARTS訓練第五周

做的是485 max consecutive ones,算是很簡單的題目,一次線性掃瞄,乙個變數記錄由0至1的翻轉,兩個變數記錄當前max序列長度和當前序列長度,乙個記錄位置的變數。很容易就寫出來了。define max a,b a b?a b int findmaxconsecutiveones ...