Добавить Middle-задачи по массивам
Родитель:
a8f57e3
· сравнить с родителем
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)`. Не сдвигайте элементы при удалении самого старого; используйте кольцевую индексацию. Не храните всю историю команд вместо самого буфера.