HDU 3584 Cube 三維樹狀陣列

2021-07-16 10:40:37 字數 1107 閱讀 7194

題意:三維的空間中有兩個操作,初始時每個空間元素均為0,更新操作是0變1,1變0,是乙個空間內的所有元素都更新,查詢是問這個點的元素是0還是1。

題解:三維樹狀陣列的iupq模型(interval update point query段更新,點求值)。

關鍵在更新的時候的邊界處理,好像是容斥原理,並不懂,先記住吧。

二維的情況:

add(x1, y1, v);

add(x1,y2+1, -v);

add(x2+1,y1,-v);

add(x2+1,y2+1,v);

三維的情況:

add(x1,y1,z1,1);

add(x1,y1,z2+1,-1);

add(x1,y2+1,z1,-1);

add(x2+1,y1,z1,-1);

add(x2+1,y2+1,z1,1);

add(x2+1,y1,z2+1,1);

add(x1,y2+1,z2+1,1);

add(x2+1,y2+1,z2+1,-1);

這道題因為只需轉變0和1,所以一直加1,求mod2就行.

**:#include #include #include #include #include using namespace std;

const int max=100+5;

typedef long long ll;

int bit[max][max][max];

int n;

int sum(int x,int y,int z)

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

int main()

{ int n,m;

while(scanf("%d%d",&n,&m)==2)

{n=n;

memset(bit,0,sizeof(bit));

for(int i=0; i

關鍵在更新的時候的邊界處理,好像是容斥原理,並不懂,先記住吧。

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 ...

Hdu3584 Cube 三維樹狀陣列

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

HDU 3584 Cube(三維BIT 容斥)

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 多組輸入,每組用例第一行為兩個整數...