code: func (sis *SortedIntSet) decr(num int) {
  	if sis.useTreeMap {
  		count, ok := sis.dict[num]
  		assert(ok)
  		if count == 1 {
  			delete(sis.dict, num)
  			// Fall back to simple arrays once we touch zero again
  			if len(sis.dict) == 0 {
  				sis.useTreeMap = false
  				sis.values = sis.values[:0] // reuse slice
  				sis.counts = sis.counts[:0] // reuse slice
  			}
  		} else {
  			sis.dict[num] = count - 1
  		}
  		return
  	}
  
  	for i, v := range sis.values {
  		if v == num {
  			sis.counts[i]--
  			if sis.counts[i] == 0 {
  				limit := len(sis.values) - 1
  				if i < limit {
  					sis.values = append(sis.values[:i], sis.values[i+1:]...)
  					sis.counts = append(sis.counts[:i], sis.counts[i+1:]...)
  				} else {
  					sis.values = sis.values[:i]
  					sis.counts = sis.counts[:i]
  				}
  			}
  			return
  		}
  	}
  
  	panic("should not be here!")
  }
docs: // Removes the state from the set, if count decrs to 0