樹狀陣列2

2021-09-01 05:38:25 字數 1405 閱讀 1018

1157: 新年彩燈ⅱ

time limit: 1 sec memory limit: 128 mb

submit: 73 solved: 25

[submit][status][web board]

description

新年將至,yy準備掛一片彩燈,形狀呈矩形,已知彩燈剛掛完的彩燈共有n*n盞(第一排編號為(1,1),(1,2),(1,3),……,第二排編號為(2,1),(2,2),(2,3)……第n排編號為(n,1),(n,2)……(n,n)),並且都是滅的。彩燈的閃爍由一段程式控制。

每一秒鐘程式會生成四個正整數a1,b1,a2,b2(1<=a1,b1,a2,b2<=n),然後將編號(x,y)滿足x在a1與a2之間,y在b1與b2之間的燈狀態改變一次,即如果燈(x,y)是滅的,那麼經過一次改變,燈(x,y)會亮,如果燈(x,y)是亮的,經過一次改變,燈(x,y)會滅。

當yy看著自己掛的彩燈不斷閃爍的時候,問題來了,yy想知道任意時刻某盞燈的狀態。

input

多組測試資料,每一組第一行是乙個整數n(1<=n<=1000)和乙個整數m(1<=m<=3000)。

然後是m行資料,包括以下兩種形式:

1 a1 b1 a2 b2 表示將編號(x,y)滿足x在a1與a2之間,y在b1與b2之間的燈狀態改變一次。

0 x y 表示yy想知道此刻編號(x,y)的燈狀態。

output

對於每組測試資料首先輸出「case #:」(』#'表示case序數)

對於每次yy想知道結果的時候,輸出燈的狀態,如果是亮的輸出」1」,否則輸出」0」;

sample input

3 51 1 1 2 2

1 2 2 3 3

0 1 1

0 2 2

0 3 3

2 30 1 1

1 1 1 2 2

0 1 1

sample output

case 1:10

1case 2:01

hint

source

/*模板題~

只是換成二維了,其他處理一樣,

*/ac_code~:

#include #include int a[1002][1002];

int n,m,c = 0;

int lowbit(int x)

int sum(int x,int y)

void update_point(int begin_a,int k,int a1,int a2)

}void update_range(int b1,int b2,int k,int a1,int a2)

int main()

else}}

return 0;

}

樹狀陣列2 更高深的樹狀陣列

一 區間修改區間求和 這個東西可就不是把 單點查詢區間修改 和 單點修改區間查詢 合起來那麼簡單了,仔細想想,拿之前的辦法都不咋地好做,那麼怎麼辦呢,我們還是要用到差分陣列,設原陣列為a,差分陣列為b,則b 1 a 1 b i a i a i 1 那麼區間修改我們就解決了,只需要log的時間即可,但...

樹狀陣列模板2

如題,已知乙個數列,你需要進行下面兩種操作 1.將某區間每乙個數數加上x 2.求出某乙個數的和 輸入輸出格式 輸入格式 第一行包含兩個整數n m,分別表示該數列數字的個數和操作的總個數。第二行包含n個用空格分隔的整數,其中第i個數字表示數列第i項的初始值。接下來m行每行包含2或4個整數,表示乙個操作...

模板 樹狀陣列 2

題目鏈結 如題,已知乙個數列,你需要進行下面兩種操作 將某區間每乙個數數加上 x 求出某乙個數的值。第一行包含兩個整數 n m,分別表示該數列數字的個數和操作的總個數。第二行包含 n 個用空格分隔的整數,其中第 i 個數字表示數列第 i 項的初始值。接下來 m 行每行包含 2 或 4個整數,表示乙個...