1. 程式人生 > >一維 + 二維樹狀陣列 + 單點更新 + 區間更新 詳解

一維 + 二維樹狀陣列 + 單點更新 + 區間更新 詳解

如果是二維的樹狀陣列的話,心裡思考一下,是不是感覺很眼熟哦!其實他們的原理是一樣的:設二維陣列為:a[][]={{a11,a12,a13,a14,a15,a16,a17,a18},{a21,a22,a23,a24,a25,a26,a27,a28},{a31,a32,a33,a34,a35,a36,a37,a38},{a41,a42,a43,a44,a45,a46,a47,a48}};那麼C[1][1] = a11,C[1][2] = a11 + a12;如此當C[1][i]...C[1][j]時跟一維的樹狀陣列是沒有什麼區別的那麼C[2][1] = a11 + a21,C[2][2] = a11 + a12 + a21 + a21
,如此可以發現其實C[2][i].....C[2][j],就是C[1][],C[2][],單獨的兩個一維樹狀陣列同一位置的值合併在一起而C[3][1] = a31,C[3][2] = a31 + a32......C[4][1] = a11 + a21 + a31 + a41,C[4][2] = a11 + a12 + a21 + a22 + a31 + a32 + a41 + a42有沒有發現,如果單獨把二維中的第一個維度拿出來A[1][m] + A[2][m] = C[2][m],A[3][m] = C[3][m],是不是也和一維的陣列一樣,所以二維陣列的規律就是,不管是橫座標還是縱座標,將他們單獨拿出來,他們都符合x += lowbit(x)
,屬於它的父親節點.