docs: protected boolean removeElementInSegment(int segmentIndex, int element) {
  		if ((element == this.values[segmentIndex]) && (element == this.values[segmentIndex + 1])) {
  			// Remove the segment
  			if (this.values.length == 2) {
  				this.values = null;
  				this.size = 0;
  			} else {
  				final int[] newTab = new int[this.values.length - 2];
  				System.arraycopy(this.values, 0, newTab, 0, segmentIndex);
  				System.arraycopy(this.values, segmentIndex + 2, newTab, segmentIndex, newTab.length - segmentIndex);
  				this.values = newTab;
  				--this.size;
  			}
  			return true;
  		}
  
  		if ((element >= this.values[segmentIndex]) && (element <= this.values[segmentIndex + 1])) {
  			if (element == this.values[segmentIndex]) {
  				// Move the lower bound
  				++this.values[segmentIndex];
  				--this.size;
  			} else if (element == this.values[segmentIndex + 1]) {
  				// Move the upper bound
  				--this.values[segmentIndex + 1];
  				--this.size;
  			} else {
  				// Split the segment
  				final int[] newTab = new int[this.values.length + 2];
  				System.arraycopy(this.values, 0, newTab, 0, segmentIndex + 1);
  				System.arraycopy(this.values, segmentIndex + 1, newTab, segmentIndex + 3, newTab.length - segmentIndex - 3);
  				newTab[segmentIndex + 1] = element - 1;
  				newTab[segmentIndex + 2] = element + 1;
  				this.values = newTab;
  				--this.size;
  			}
  
  			return true;
  		}
  
  		return false;
  	}