UVa 11992 Fast Matrix Operations(線段樹雙懶操作,二維轉一維)
題意:給個r*c的矩形,三種操作,將一個子矩形權值+v,將一個子矩陣權值賦值為v,查詢一個子矩陣sum,max,min。起初矩陣權值為0,保證r<=20,r*c<=1e6,操作次數不超過10000
題解:將二維轉一維,設當前點為(x,y),則它在線段樹上的點為(x-1)*c+y,由於行不超過20行,不妨枚舉每一行,去操作。對於一維的線段樹,要進行賦值,加法,查詢sum,max,min的操作。設兩個懶操作變量a,b,a表示賦值的,b表示加法的。當進行賦值操作時,b清0,a+=v;當進行加法操作時,如果a>0,則a+=v,否則b+=v;任何操作時,處理sum,max,min,處理sum時不要忘記乘上區間長度。注意在懶操作和update函數都要進行如上操作。寫一個種樹、兩個更值、三個查詢函數。
代碼
//Hello. I'm Peter.
//#pragma comment(linker, /STACK:102400000,102400000)
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include