public ST PointedUpdate(int position, DO action, double value) { ST st = new ST(); st.root = st.Copy(root); st.length = length; if (action == DO.ADD) pointed_update(ref st.root, 0, length - 1, position, ACTION.ADD, value); else pointed_update(ref st.root, 0, length - 1, position, ACTION.UPDATE, value); return st; }
public ST MassUpdate(int left, int right, DO action, double value) { if (left == right) return PointedUpdate(left, action, value); else { ST st = new ST(); st.root = st.Copy(root); st.length = length; if (action == DO.ADD) mass_update(ref st.root, 0, length - 1, left, right, ACTION.ADD, value); else mass_update(ref st.root, 0, length - 1, left, right, ACTION.UPDATE, value); return st; } }