题意:给个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
?