private void RebuildSqrt()

in csharp/src/Containers/SortedSqrtDecomposition.cs [86:125]


		private void RebuildSqrt()
		{
			int index = 0;
			needRebuild = false;
			for (int i = 0; i < numberOfBlocks; ++i)
			{
				for (int j = (len * i << 1); j < endOfBlock[i]; ++j)
				{
					tempArray[index] = data[j];
					index++;
				}
			}
			len = (int)Math.Ceiling(Math.Sqrt(index));
			if (len < 5)
			{
				len = 5;
			}
			numberOfBlocks = (int)Math.Ceiling(1.0 * index / len);
			if (numberOfBlocks == 0)
			{
				numberOfBlocks = 1;
				return;
			}
			if (endOfBlock.Length <= numberOfBlocks)
			{
				ResizeBlocks(numberOfBlocks << 1);
			}
			if (data.Length <= (len * (numberOfBlocks + 3) << 1))
			{
				ResizeData((len * (2 + numberOfBlocks)) << 2);
			}

			for (int i = 0; i < index; ++i)
			{
				int tempIndex = i / len;
				data[(len * tempIndex << 1) + i % len] = tempArray[i];
				endOfBlock[tempIndex] = (len * tempIndex << 1) + i % len + 1;
			}
			for (int i = 0; i < numberOfBlocks; ++i) dataInBegin[i] = data[len * i << 1];
		}