JustCaptain kod-buduschego

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

Закрыто JustCaptain хочет слить llm/middle-9c3d46 → main
1 файл изменён +94

Войди, чтобы оставлять замечания к строкам.

Показать разницуСкрыть разницу
@@ -0,0 +1,94 @@
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)`. Не сдвигайте элементы при удалении самого старого; используйте кольцевую индексацию. Не храните всю историю команд вместо самого буфера.