HDU-1754
線段樹陣列請開到四倍
眾所周知陣列開小會導致re tle wa等一系列問題orz
板子就是板子,陣列從零開始或是從一開始都沒什麼問題,就是2*root+1還是2*root+2的問題。query(q)裡的範圍不要搞反了,是詢問範圍包括當前節點的範圍。
總之線段樹是入門了(吧
解析board:線段樹是一棵葉子節點為具體資料(1st,2nd,3rd……)其上的節點為所囊括的葉子節點([1,2][3,4]……[1,4][5,8]……)的最值的樹
build(int root,int l,int r) 建立節點root範圍為[l,r],如果是葉子節點(l==r)則當前root點為具體值,否則遞迴建立並取建立節點的最值
q(int root,int ql,int qr,int l,int r) 如果已知範圍(即已查詢到該範圍最值的節點)被包括在ql,qr內,返回當前root值;否則繼續向左/右查詢並取最值
mof(int root,int l,int r,int now,int nw)單點更改 如果已到葉子節點(需要修改的now點),則改為新的nw值(或者加減之類的);否則遞迴左右查詢,並更新最值
區間更改有延遲陣列或固定兩種,做到題再寫(是啦就是還不會了啦 |||^ Q
Over.