private void UpdateStateQueue(
      MinPriorityDecoderQueue<DecoderState> minPriorityDecoderQueue,
      DecoderState curState,
      DecoderState prevState,
      ScoredPhrasePairForSentence phrase,
      HashMap<DecoderState, BackPointerElement> backPointers) {
    BackPointerElement elem = backPointers.get(curState);

    if (elem == null || elem.getState().getScore() < curState.getScore()) {
      minPriorityDecoderQueue.insert(curState, curState.getScore());

      if (elem == null) {
        backPointers.put(curState, new BackPointerElement(prevState, phrase));
      } else {
        elem.setState(prevState);
        elem.setPhrase(phrase);
      }
    }
  }