Выполнять заданные запросы в очереди в соответствии с заданными правилами

Опубликовано: 21 Сентября, 2022

Дана очередь, состоящая из первых N натуральных чисел и запросов Query[][] типа {E, X}, задача состоит в том, чтобы выполнить заданные запросы в заданной очереди по следующим правилам:

  • Если значение E равно 1 , то передний элемент извлекается из очереди.
  • Если значение E равно 2 , то удалите значение X из очереди, если оно существует.
  • Если значение E равно 3 , то найти позицию X в очереди, если она существует. В противном случае выведите «-1» .

Примеры:

Input: N = 5, Query[][] = {{1, 0}, {3, 3}, {2, 2}}
Output: 2
Explanation:
Initially queue looks like { 1, 2, 3, 4, 5 }. Following are the operations performed according to the queries given: 
1st query  E = 1, X = 0 -> 1 is popped out changing queue to { 2, 3, 4, 5 }.
2nd query E = 3, X = 3 -> The position of 3 is printed. 
3rd query E = 2, X = 2 -> 2 is removed from queue changing queue to { 3, 4, 5 }.

Input: N = 5, Query[][] = {{1, 0}, {3, 1}}
Output: -1

Подход: Данную проблему можно решить с помощью жадного подхода и бинарного поиска. Выполните следующие шаги, чтобы решить данную проблему.

  • Инициализируйте переменную, скажем, countE1 как 0 , чтобы подсчитать количество вхождений события E1 .
  • Увеличьте значение countE1 на 1 , если запрос имеет тип E1 .
  • Поддерживайте заданную структуру данных, в которой хранятся элементы, удаляемые при выполнении операций запросов.
  • Для запроса типа 3 выполните следующие действия:
    • Инициализируйте переменную, скажем, position для хранения начальной позиции X .
    • Найдите значение X в наборе, чтобы проверить, удален ли X уже или нет, и если X присутствует в наборе, выведите -1 . В противном случае найдите положение X .
    • Пройдите через набор с помощью итератора, скажите это , и если его значение > X , то выйдите из цикла. В противном случае уменьшите позицию на 1 .
    • Распечатайте конечную позицию хранилища X в переменной position.

Ниже приведена реализация вышеуказанного подхода:

Сложность времени:

  • Для запроса типа 1: O(1)
  • Для запроса типа 2: O(log N)
  • Для запроса типа 3: O(N 2 log N)

Вспомогательное пространство: O(N)