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 的立方體,如果只更新...