JustCaptain kod-buduschego

Добавить Middle-задачи по массивам

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