code: @Override
      @ConstantTime(amortized = true)
      public void insert(K key) {
          if (key == null) {
              throw new IllegalArgumentException("Null keys not permitted");
          }
          if (compare(key, maxKey) > 0) {
              throw new IllegalArgumentException("Key is more than the maximum allowed key");
          }
  
          if (compare(key, lastDeletedKey) < 0) {
              throw new IllegalArgumentException("Invalid key. Monotone heap.");
          }
          int b = computeBucket(key, lastDeletedKey);
          buckets[b].add(key);
  
          // update current minimum cache
          if (currentMin == null || compare(key, currentMin) < 0) {
              currentMin = key;
              currentMinBucket = b;
              currentMinPos = buckets[b].size() - 1;
          }
  
          size++;
      }
docs: {@inheritDoc}
  
  @throws IllegalArgumentException
  if the key is null
  @throws IllegalArgumentException
  if the key is less than the minimum allowed key
  @throws IllegalArgumentException
  if the key is more than the maximum allowed key
  @throws IllegalArgumentException
  if the key is less than the last deleted key (or the minimum
  key allowed if no key has been deleted)