小a正在玩一款即時戰略遊戲,現在他要用航空母艦對敵方陣地進行轟炸
地方陣地可以看做是n×m
'>n×mn×m的矩形
航空母艦總共會派出q
'>qq架飛機。
飛機有兩種,第一種飛機會轟炸以(xi
,yi)
'>(xi,yi)(xi,yi)為中心,對角線長為l
i'>lili的正菱形(也就是兩條對角線分別於x
'>xx軸 y
'>yy軸平行的正方形),而第二種飛機只會轟炸正菱形的上半部分(包括第x
i'>xixi行)
(具體看樣例解釋)
現在小a想知道所有格仔被轟炸次數的異或和
注意:不保證被轟炸的格仔一定在矩形範圍內,若越界請忽略
第一行三個整數n,m,q'>n,m,qn,m,q,分別表示矩陣的長/寬/詢問次數
接下來q
'>qq行,每行四個整數opt
,x,y
,l'>opt,x,y,lopt,x,y,l,表示飛機型別,轟炸的座標,以及對角線長度
保證l'>ll為奇數!
乙個整數,表示所有格仔被轟炸次數的異或和示例1
4 5 41 2 2 1
1 3 3 5
1 3 2 3
2 2 4 3
2題意:每次對乙個菱形區域轟炸,求每個點被轟炸次數的異或和。
題解:如果是矩形,很容易利用差分+二維字首和解決(差分主要用於區間修改問題,字首和主要用於單點查詢問題),但是由於是矩形,單點查詢並不能通過簡單的加減進行維護,
於是動態差分誕生了,由於單點查詢是按照行列順序進行的,所以可以讓差分陣列不斷地向下向右轉移,具體見下圖
小a的轟炸遊戲(差分,字首和)
題目傳送門 題意 給出乙個n m的矩形,然後有兩個操作.1操作,對乙個給出的菱形,對菱形範圍內的東西進行 1。2操作,對乙個上半菱形的區域,進行 1操作。最後求矩形內各個數的異或和。思路 在矩形中,我們在四個角上進行 然後利用差分的性質,就解決了區間更新,但是在這裡,想破腦汁,也沒想出怎麼進行 因為...
字首和 二維字首和與差分的小總結
在了解二維字首和之前,我們首先需要了解一下什麼是字首和。如果我給你一串長度為n的數列a1,a2,a3.an,再給出m個詢問,每次詢問給出l,r兩個數,要求給出區間 l,r 裡的數的和,你會怎麼做,若是沒有了解過字首和的人看到這道題的想法可能是對於m次詢問,我每次都遍歷一遍它給的區間,計算出答案,這樣...
地毯 二維差分和二維字首和
見 類似於一維差分,o 1 的時間複雜度。二維差分相關概念 均是搬運 當對乙個二維區間內的所有數做出全部加乙個數或者全部減乙個數的操作時,需要修改二維差分矩陣內的四個點。比如我想讓a x1 y1 和a x2 y2 兩對角頂點圍成的矩形區域內的所有點都加1,則我需要 讓a x1 y1 a x1 y2 ...