1. 程式人生 > >【CH4301】Can you answer on these queries III

【CH4301】Can you answer on these queries III

div 信息 線段樹 ont tag 部分 iii ans 區間和

區間操作線段樹問題。需要維護四個信息:區間和sum,緊靠左側的最大連續子段和lmax,緊靠右側的最大連續子段和rmax,區間最大連續子段和dat。

不需要lazy tag,因為只用單點修改,總是要遞歸到最底層。上傳部分:

void up(int ls/*左兒子*/,int rs/*右兒子*/,int fa/*父親*/)
{
    t[fa].sum=t[ls].sum+t[rs].sum;//區間和相加
    t[fa].lmax=Max(t[ls].lmax,t[ls].sum+t[rs].lmax);
    t[fa].rmax=Max(t[rs].rmax,t[rs].sum+t[ls].rmax);
    t[fa].dat
=Max(Max(t[ls].dat,t[rs].dat),t[ls].rmax+t[rs].lmax/*中央部分才有效*/); }

因為是單點修改,區間查詢,所以題目中兩種操作x,y的含義不同,change和ask進入下一層的判斷代碼不同,不可以寫錯。

【CH4301】Can you answer on these queries III