JustCaptain kod-buduschego

Добавить оставшиеся Middle и Senior задачи по массивам

JustCaptain · 2 недели назад 1b7ae631e8e0aa08482b2abc32064a70d25c5de5
2 файла
  • Показать разницуСкрыть разницу
    1 +# 🟠 Middle — массивы
    2 +
    3 +Четыре авторские задачи на скользящее окно, префиксные суммы, слияние и компактную работу с памятью.
    4 +
    5 +## 1. Удаление устаревших измерений
    6 +
    7 +В журнале датчика записаны значения. Удалите все значения, меньшие порога `X`, сохранив порядок оставшихся. Сдвигайте элементы внутри исходного массива, не создавая второй массив.
    8 +
    9 +**Ввод:** `N X` (`1 ≤ N ≤ 2·10^5`, `-10^9 ≤ X ≤ 10^9`), затем `N` целых чисел `a_i` (`|a_i| ≤ 10^9`).
    10 +
    11 +**Вывод:** количество оставшихся значений, затем сами значения. Если ни одного не осталось, выведите только `0`.
    12 +
    13 +**Пример:**
    14 +```text
    15 +7 5
    16 +8 2 5 1 9 4 7
    17 +```
    18 +```text
    19 +4
    20 +8 5 9 7
    21 +```
    22 +
    23 +**Требование:** `O(N)` времени и `O(1)` дополнительной памяти. Подумайте, почему удалять элементы по одному из середины вектора невыгодно.
    24 +
    25 +## 2. Суммы отрезков
    26 +
    27 +Дан массив расходов за `N` дней и `Q` запросов. Для каждого запроса найдите сумму расходов на отрезке от `L` до `R` включительно. Индексы во входе начинаются с единицы.
    28 +
    29 +**Ввод:** `N Q` (`1 ≤ N,Q ≤ 2·10^5`), затем `N` неотрицательных чисел не больше `10^9`, затем `Q` пар `L R` (`1 ≤ L ≤ R ≤ N`).
    30 +
    31 +**Вывод:** для каждого запроса выведите сумму на отдельной строке.
    32 +
    33 +**Пример:**
    34 +```text
    35 +5 3
    36 +2 4 1 7 3
    37 +1 3
    38 +2 5
    39 +4 4
    40 +```
    41 +```text
    42 +7
    43 +15
    44 +7
    45 +```
    46 +
    47 +**Требование:** `O(N+Q)` времени. Используйте префиксные суммы типа `long long`; массив префиксов занимает `O(N)` дополнительной памяти.
    48 +
    49 +## 3. Слияние двух журналов
    50 +
    51 +Даны два отсортированных по неубыванию массива временных меток. Объедините их в один отсортированный массив. При равных значениях сначала берите элемент из первого массива.
    52 +
    53 +**Ввод:** `N M` (`0 ≤ N,M ≤ 2·10^5`), затем `N` чисел первого массива и `M` чисел второго; значения по модулю не превосходят `10^9`.
    54 +
    55 +**Вывод:** `N+M` чисел объединённого массива.
    56 +
    57 +**Пример:**
    58 +```text
    59 +4 3
    60 +1 4 4 9
    61 +2 4 8
    62 +```
    63 +```text
    64 +1 2 4 4 4 8 9
    65 +```
    66 +
    67 +**Требование:** `O(N+M)` времени. Результат неизбежно занимает `O(N+M)` памяти; избегайте повторных вставок в начало вектора.
    68 +
    69 +## 4. Самое длинное окно бюджета
    70 +
    71 +Для каждого дня известна стоимость покупок. Найдите максимальную длину непрерывного отрезка дней, на котором суммарная стоимость не превосходит бюджета `B`. Все стоимости неотрицательны.
    72 +
    73 +**Ввод:** `N B` (`1 ≤ N ≤ 2·10^5`, `0 ≤ B ≤ 10^18`), затем `N` чисел `a_i` (`0 ≤ a_i ≤ 10^9`).
    74 +
    75 +**Вывод:** максимальная длина подходящего отрезка. Пустой отрезок допустим, поэтому ответ может быть `0`.
    76 +
    77 +**Пример:**
    78 +```text
    79 +6 7
    80 +2 1 3 2 1 4
    81 +```
    82 +```text
    83 +4
    84 +```
    85 +
    86 +**Требование:** `O(N)` времени и `O(1)` дополнительной памяти после чтения входных значений.
    87 +
    88 +---
    89 +
    90 +[⬅️ К материалу по массивам](README.md)
  • Показать разницуСкрыть разницу
    1 +# 🔴 Senior — массивы
    2 +
    3 +Задачи требуют сочетать алгоритмическую идею с контролем памяти и переполнений. Во всех задачах оптимизируйте дополнительную память, но не теряйте корректность.
    4 +
    5 +## 1. Потоковый медианный фильтр
    6 +
    7 +Датчик выдаёт `N` целых измерений. Для каждого окна из `K` соседних значений выведите медиану: элемент с индексом `floor((K-1)/2)` в отсортированном окне (при чётном `K` берётся нижняя медиана). Нельзя сортировать каждое окно заново.
    8 +
    9 +**Ввод:** `N K` (`1 ≤ K ≤ N ≤ 2·10^5`), затем `N` значений `a_i` (`|a_i| ≤ 10^9`).
    10 +
    11 +**Вывод:** `N-K+1` медиан в порядке окон.
    12 +
    13 +**Пример:**
    14 +```text
    15 +7 3
    16 +1 3 -1 -3 5 3 6
    17 +```
    18 +```text
    19 +1 -1 -1 3 5
    20 +```
    21 +
    22 +**Требование:** не хуже `O(N log K)` времени. Обоснуйте память выбранной структуры; устаревшие элементы не должны бесконтрольно накапливаться.
    23 +
    24 +## 2. Частоты без таблицы
    25 +
    26 +Массив содержит `N` целых чисел из диапазона `[0, N-1]`. Преобразуйте его на месте так, чтобы в позиции `i` оказалось количество исходных значений, равных `i`. Выведите итоговый массив. Дополнительный массив и контейнеры запрещены.
    27 +
    28 +**Ввод:** `N` (`1 ≤ N ≤ 2·10^5`), затем `N` целых чисел `a_i` (`0 ≤ a_i < N`).
    29 +
    30 +**Вывод:** `N` частот в порядке значений от `0` до `N-1`.
    31 +
    32 +**Пример:**
    33 +```text
    34 +7
    35 +1 2 1 0 2 1 4
    36 +```
    37 +```text
    38 +1 3 2 0 1 0 0
    39 +```
    40 +
    41 +**Требование:** `O(N)` времени и `O(1)` дополнительной памяти. Можно использовать значения самого массива для кодирования, но аккуратно восстановите результат. Тип элементов позволяет хранить промежуточные значения до `N*N`.
    42 +
    43 +## 3. Кольцевой буфер событий
    44 +
    45 +Реализуйте массив фиксированной вместимости `C`, который хранит последние события. Изначально буфер пуст. Поступают `Q` команд двух видов: `1 x` — добавить событие `x`, удалив самое старое, если буфер уже полон; `2` — вывести все события от самого старого к самому новому. Для пустого буфера команда вывода печатает `EMPTY`.
    46 +
    47 +**Ввод:** `C Q` (`1 ≤ C ≤ 2·10^5`, `1 ≤ Q ≤ 2·10^5`), далее команды. Значения `x` по модулю не превосходят `10^9`.
    48 +
    49 +**Вывод:** для каждой команды типа `2` выведите строку с элементами буфера в порядке времени либо `EMPTY`.
    50 +
    51 +**Пример:**
    52 +```text
    53 +3 6
    54 +1 10
    55 +1 20
    56 +1 30
    57 +1 40
    58 +2
    59 +2
    60 +```
    61 +```text
    62 +20 30 40
    63 +20 30 40
    64 +```
    65 +
    66 +**Требование:** храните элементы в одном массиве размера `C`; добавление должно работать за `O(1)`. Команда вывода занимает время, пропорциональное числу выведенных элементов. Не перемещайте все элементы при каждом добавлении.
    67 +
    68 +## 4. Минимальная стоимость слияния блоков
    69 +
    70 +Есть `N` отсортированных массивов. Объединение двух массивов длины `x` и `y` стоит `x+y` операций и создаёт новый массив этой длины. Найдите минимальную суммарную стоимость объединения всех массивов. Ответьте также, сколько элементов памяти достаточно держать одновременно при стратегии, объединяющей две самые короткие последовательности и освобождающей их после слияния. Для ответа о памяти выведите максимум суммарных длин живых массивов, считая входные массивы и результат каждого объединения, но не учитывая уже освобождённые массивы.
    71 +
    72 +**Ввод:** `N` (`1 ≤ N ≤ 2·10^5`), затем `N` длин `L_i` (`1 ≤ L_i ≤ 10^9`). Суммарная длина может превышать 32-битный диапазон.
    73 +
    74 +**Вывод:** минимальная суммарная стоимость и пиковое число одновременно хранимых элементов при описанной стратегии.
    75 +
    76 +**Пример:**
    77 +```text
    78 +3
    79 +2 3 5
    80 +```
    81 +```text
    82 +15 15
    83 +```
    84 +
    85 +**Пояснение:** сначала объединяются длины `2` и `3`, стоимость `5`; затем длины `5` и `5`, стоимость `10`. Пиковая память при первом слиянии — `2+3+5=10`, при втором — `5+5+10=20`, значит пример должен учитывать входные последовательности, оставшиеся живыми: исходные блоки освобождаются сразу после каждого слияния. Для однозначного подсчёта считайте, что перед слиянием входные два буфера и новый буфер одновременно существуют, а все прочие текущие буферы тоже остаются живыми.
    86 +
    87 +**Требование:** реализуйте жадную стратегию с очередью с приоритетом, не моделируя содержимое элементов. Используйте 64-битные целые. Внимательно формализуйте пик памяти для каждой операции.
    88 +
    89 +---
    90 +
    91 +[⬅️ К материалу по массивам](README.md)