Добавить авторские задачи по массивам #3
1 файл изменён
+83
Войди, чтобы оставлять замечания к строкам.
Показать разницуСкрыть разницу
| @@ -0,0 +1,83 @@ | |||
| 1 | +# 🟢 Intern — массивы | ||
| 2 | + | ||
| 3 | +Четыре авторские задачи на индексацию, `std::vector` и аккуратное использование памяти. | ||
| 4 | + | ||
| 5 | +## 1. Температурный диапазон | ||
| 6 | + | ||
| 7 | +Метеостанция записала температуру за `N` дней. Найдите минимум и максимум, не сохраняя весь ряд. | ||
| 8 | + | ||
| 9 | +**Ввод:** `N` (`1 ≤ N ≤ 10^6`), затем `N` чисел `t_i` (`-10^6 ≤ t_i ≤ 10^6`). | ||
| 10 | + | ||
| 11 | +**Вывод:** минимум и максимум через пробел. | ||
| 12 | + | ||
| 13 | +**Пример:** | ||
| 14 | +'''text | ||
| 15 | +5 | ||
| 16 | +12 -3 8 8 21 | ||
| 17 | +''' | ||
| 18 | +'''text | ||
| 19 | +-3 21 | ||
| 20 | +''' | ||
| 21 | + | ||
| 22 | +**Требование:** время `O(N)`, дополнительная память `O(1)`. | ||
| 23 | + | ||
| 24 | +## 2. Сжать повторы | ||
| 25 | + | ||
| 26 | +Дан отсортированный массив кодов событий. Оставьте по одному элементу из каждого блока одинаковых соседних значений. Выведите количество оставшихся значений и сами значения. Изменять массив нужно на месте. | ||
| 27 | + | ||
| 28 | +**Ввод:** `N` (`0 ≤ N ≤ 10^5`), затем `N` неубывающих чисел (`|a_i| ≤ 10^9`). | ||
| 29 | + | ||
| 30 | +**Вывод:** длина результата, затем результат. | ||
| 31 | + | ||
| 32 | +**Пример:** | ||
| 33 | +'''text | ||
| 34 | +7 | ||
| 35 | +2 2 2 5 5 8 10 | ||
| 36 | +''' | ||
| 37 | +'''text | ||
| 38 | +4 | ||
| 39 | +2 5 8 10 | ||
| 40 | +''' | ||
| 41 | + | ||
| 42 | +**Требование:** `O(N)` времени и `O(1)` дополнительной памяти. | ||
| 43 | + | ||
| 44 | +## 3. Циклическая доставка | ||
| 45 | + | ||
| 46 | +Лента с `N` посылками сдвигается вправо на одну позицию: последняя посылка становится первой. Выполните `K` таких сдвигов и выведите порядок. | ||
| 47 | + | ||
| 48 | +**Ввод:** `N` и `K` (`1 ≤ N ≤ 2·10^5`, `0 ≤ K ≤ 10^18`), затем `N` меток. | ||
| 49 | + | ||
| 50 | +**Вывод:** массив после сдвигов. | ||
| 51 | + | ||
| 52 | +**Пример:** | ||
| 53 | +'''text | ||
| 54 | +5 7 | ||
| 55 | +1 2 3 4 5 | ||
| 56 | +''' | ||
| 57 | +'''text | ||
| 58 | +4 5 1 2 3 | ||
| 59 | +''' | ||
| 60 | + | ||
| 61 | +**Требование:** `O(N)` времени и `O(1)` дополнительной памяти; не создавайте копию массива. | ||
| 62 | + | ||
| 63 | +## 4. Сколько раз рос буфер? | ||
| 64 | + | ||
| 65 | +Динамический массив начинает с вместимости `1`. При нехватке места буфер удваивается, все элементы копируются в новое хранилище. Для `N` добавлений найдите число расширений и общее количество скопированных элементов. Моделировать отдельные добавления нельзя. | ||
| 66 | + | ||
| 67 | +**Ввод:** `N` (`0 ≤ N ≤ 10^18`). | ||
| 68 | + | ||
| 69 | +**Вывод:** количество расширений и число скопированных элементов. | ||
| 70 | + | ||
| 71 | +**Пример:** | ||
| 72 | +'''text | ||
| 73 | +9 | ||
| 74 | +''' | ||
| 75 | +'''text | ||
| 76 | +4 15 | ||
| 77 | +''' | ||
| 78 | + | ||
| 79 | +**Пояснение:** вместимости `1 → 2 → 4 → 8 → 16`; копируются `1+2+4+8=15` элементов. Учтите переполнение при удвоении. | ||
| 80 | + | ||
| 81 | +--- | ||
| 82 | + | ||
| 83 | +[⬅️ К материалу по массивам](README.md) | ||