void updy(int idx, int lx, int rx, int idy, int ly, int ry, int stx, int endx, int sty, int endy, int val)
{
lazify(idx, idy, lx, rx, ly, ry);
if(ly>=sty && ry<=endy)
{
if(lx>=stx && rx<=endx)
{
segt[idx][idy]+=val;
if(ly!=ry)
{
lzy[idx][idy*2]+=val;
lzy[idx][idy*2+1]+=val;
}
if(lx!=rx)
{
lazy[idx*2][idy]+=val;
lazy[idx*2+1][idy]+=val;
}
}
else
{
segt[idx][idy]=max(segt[idx*2][idy], segt[idx*2+1][idy]);
}
return;
}
if(ly>endy || ry<sty) return;
int mid=(ly+ry)/2;
updy(idx, lx, rx, idy*2, ly, mid, stx, endx, sty, endy, val);
updy(idx, lx, rx, idy*2+1, mid+1, ry, stx, endx, sty, endy, val);
segt[idx][idy]=max(segt[idx][idy*2], segt[idx][idy*2+1]);
}
void updx(int ind, int lx, int rx, int stx, int endx, int sty, int endy, int val)
{
int lazyupd=queryy(ind, 1, lx, rx, 0, m-1, sty, endy);
if(lx>endx || rx<stx) return;
if(lx>=stx && rx<=endx)
{
updy(ind, lx, rx, 1, 0, m-1, stx, endx, sty, endy, val);
return;
}
int mid=(lx+rx)/2;
updx(ind*2, lx, mid, stx, endx, sty, endy, val);
updx(ind*2+1, mid+1, rx, stx, endx, sty, endy, val);
updy(ind, lx, rx, 1, 0, m-1, stx, endx, sty, endy, val);
return;
}