예제 #1
0
파일: HORRIBLE_v1.cs 프로젝트: Dariasz/SPOJ
    private void Build(int treeArrayIndex, int segmentStartIndex, int segmentEndIndex)
    {
        if (segmentStartIndex == segmentEndIndex)
        {
            _treeArray[treeArrayIndex] = new SumQueryObject(segmentStartIndex, 0);
            return;
        }

        int leftChildTreeArrayIndex  = 2 * treeArrayIndex + 1;
        int rightChildTreeArrayIndex = leftChildTreeArrayIndex + 1;
        int leftChildSegmentEndIndex = (segmentStartIndex + segmentEndIndex) / 2;

        Build(leftChildTreeArrayIndex, segmentStartIndex, leftChildSegmentEndIndex);
        Build(rightChildTreeArrayIndex, leftChildSegmentEndIndex + 1, segmentEndIndex);

        _treeArray[treeArrayIndex] = _treeArray[leftChildTreeArrayIndex].Combine(_treeArray[rightChildTreeArrayIndex]);
    }
예제 #2
0
파일: HORRIBLE_v1.cs 프로젝트: Dariasz/SPOJ
 public void Update(SumQueryObject updatedLeftChild, SumQueryObject updatedRightChild)
 => SumWithoutRangeAddition = updatedLeftChild.Sum + updatedRightChild.Sum;
예제 #3
0
파일: HORRIBLE_v1.cs 프로젝트: Dariasz/SPOJ
 public SumQueryObject Combine(SumQueryObject rightAdjacentObject)
 => new SumQueryObject(
     segmentStartIndex: SegmentStartIndex,
     segmentEndIndex: rightAdjacentObject.SegmentEndIndex,
     sumWithoutRangeAddition: Sum + rightAdjacentObject.Sum);