HDU 3584 Cube(三維BIT 容斥)

2021-07-04 23:15:35 字數 1175 閱讀 8953

description

給出乙個全是0組成的三維陣列,有兩種操作:

0 x1 y1 z1 x2 y2 z2:把從點(x1,y1,z1)到點(x2,y2,z2)之間這個小正方體中所有元素反轉,即由0變1,由1變0

1 x y z:查詢點(x,y,z)上的值

input

多組輸入,每組用例第一行為兩個整數n和m分別表示三維陣列的任一維大小以及運算元,之後m行每行一種操作,以檔案尾結束輸入

output

對於每組用例中的查詢,輸出點(x,y,z)上的值

sample input

2 5

1 1 1 1 1 1 1

0 1 1 1

1 1 1 1 2 2 2

0 1 1 1

0 2 2 2

sample output

1 0

1solution

開乙個三維樹狀陣列,把修改次數看作字首和,對於每次查詢(x,y,z),那麼sum(x,y,z)&1即為答案,因為是三維的更新樹狀陣列,所以用到了容斥,總共2^3=8種情況,最後的時間複雜度是o(m*logn*logn*logn)

code

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define maxn 111

int n,m;

int b[maxn][maxn][maxn];

int getsum(int x,int y,int z)

void update(int x,int y,int z)

int main()

else

//查詢操作 }}

return

0;}

hdu 3584 cube 三維樹狀陣列

儘管還是沒怎麼想通這題為什麼可以這樣解,權當是拿來練練三維樹狀陣列了。include include define lowbit i i i define n 128 int a n n n void update int i,int j,int k int sum int i,int j,int ...

HDU 3584 Cube 三維樹狀陣列

題意 三維的空間中有兩個操作,初始時每個空間元素均為0,更新操作是0變1,1變0,是乙個空間內的所有元素都更新,查詢是問這個點的元素是0還是1。題解 三維樹狀陣列的iupq模型 interval update point query段更新,點求值 關鍵在更新的時候的邊界處理,好像是容斥原理,並不懂,...

Hdu3584 Cube 三維樹狀陣列

題意 三維的空間中有兩個操作,初始時每個空間元素均為0,然後更新操作是0變1,1變0,是乙個空間內的所有元素都更新,然後查詢是問這個點的元素是0還是1 思路 區間更新,點查詢的三維樹狀陣列。記錄改變的次數,次數為奇數則最終為1,偶則為0。更新 x1,y1,z1 x2,y2,z2 的立方體,如果只更新...