1. 程式人生 > >洛谷 P3372 線段樹1-分塊做法

洛谷 P3372 線段樹1-分塊做法

我向來不喜歡廢話,直接開始說啦!

 

預處理:

①段數t=sqrt(n);

②每段左邊界L[i]=(i-1)*t+1;

③每段右邊界R[i]=i*t;

④補充處理:t2小於n的再補一段,左邊界R[t-1]+1,右邊界n;

⑤區間和sum[i]=∑jL[i]<=j<=R[i]a[j];

⑥預設增量標記add=0;

 

區間修改:

(情況一)l,r在同一塊內:直接對區間內的每個數加,區間和用詢問長度用修改1次;

(情況二)l,r不在同一塊內:

①l+1到r-1塊內:全部修改增量標記;

②l塊:做法同情況1,右邊界是R[pos[l]];

③r快:做法同情況1,左邊界是L[pos[r]];

 

區間查詢:

(情況一)l,r在同一塊內:直接對區間內的數求和,再加上增量標記*詢問長;

(情況二)l,r不在同一塊內:

①l+1到r-1塊內:全部加上區間和以及增量標記*段長;

②l塊:做法同情況1,右邊界是R[pos[l]];

③r快:做法同情況1,左邊界是L[pos[r]];

 

整體思想:大段維護,(抱歉打錯字啦)區域性樸素

撒花!