Техніка двох вказівників
Техніка двох вказівників — це стратегія, яка часто використовується в комп'ютерних науках і програмуванні для вирішення задач, пов'язаних з масивами або послідовностями. Вона полягає в тому, що використовуються два вказівники, які проходять масив або послідовність з різних позицій, часто рухаючись в протилежних напрямках або з різними швидкостями. Ця техніка особливо корисна для вирішення задач, пов'язаних з пошуком, оптимізацією або маніпуляцією масивами ефективно.
Ось детальний опис того, як працює техніка двох вказівників:
Ініціалізація: Спочатку ви встановлюєте два вказівники, зазвичай на різних позиціях в масиві або послідовності.
Рух: Ви ітеративно рухаєте вказівники на основі певних умов, поки вони не зустрінуться або не досягнуть певної умови. Рух вказівників можна контролювати на основі вимог задачі. Наприклад, один вказівник може рухатися швидше, ніж інший, або вони можуть рухатися в протилежні напрямки.
Перевірка умов: На кожному кроці ітерації ви перевіряєте певні умови на основі вимог задачі. Ці умови часто визначають, чи потрібно рухати вказівники, оновлювати деякі змінні або виконувати інші операції.
Завершення: Процес триває, поки один або обидва вказівники не досягнуть кінця масиву або послідовності, або поки не буде виконана якась інша умова завершення.
Техніка двох вказівників особливо корисна в задачах, що стосуються пошуку пар або підмасивів, які відповідають певним критеріям, знаходження оптимальних рішень або маніпуляції послідовностями ефективно без використання вкладених циклів. Вона часто забезпечує більш ефективне рішення порівняно з методами брутального перебору, особливо для задач з лінійними або логарифмічними вимогами до часу складності.
Хусейн та Ярослав грають у карткову гру. На столі викладено карт, кожна з яких має написане різне число. Гравці грають по черзі. Хусейн розпочинає гру. На кожному ходу гравець може взяти або найліву, або найправу карту. Гравець завжди вибирає карту з найбільшим числом. Гра закінчується, коли на столі не залишиться карт. Знайдіть суму чисел на картах, зібраних Хусейном та Ярославом наприкінці гри.
Вхідні дані. Перший рядок містить число карт n~(1 \le n \le 10000) на столі. Другий рядок містить позитивних цілих чисел, кожне з яких вказує число на карті. Всі числа не перевищують 10^9.
Вихідні дані. Виведіть суму чисел на картах, зібраних Хусейном та Ярославом наприкінці гри.
7
4 7 5 1 12 8 218 21Хусейн виклав карт в ряд з числами a_1, a_2, a_3, ..., a_n. Потім він зібрав їх і розмістив в іншому порядку: a_1, a_3, a_5, ..., a_6, a_4, a_2. Це послідовність, яку він дав Ярославу. Ваше завдання — допомогти Ярославу відновити початкову послідовність Хусейна.
Наприклад, якщо Ярослав отримав послідовність (2, 4, 9, 4, 7, 6), тоді він повинен повернути послідовність (2, 6, 4, 7, 9, 4) Хусейну.
Вхідні дані. Перший рядок містить одне ціле число n~(1 \le n \le 10000), що представляє кількість карт. Другий рядок містить позитивних цілих чисел, написаних на картах. Всі числа не перевищують 10^9.
Вихідні дані. Виведіть початкову послідовність Хусейна.
6
2 4 9 4 7 62 6 4 7 9 47
5 7 34 1 89 4 25 2 7 4 34 89 1Хусейн має рядок, що складається з символів та . Щоб розважити себе, він вигадував таку гру. Хусейн може виконати одну з двох операцій зі рядком:
додати на лівий кінець, а на правий кінець;
додати на правий кінець, а на лівий кінець;
Наприклад, з рядка Хусейн може отримати або .
Вам дано рядок, отриманий після всіх операцій Хусейна (можливо, він не виконував жодної операції). Визначте найменшу можливу довжину, яку рядок міг спочатку мати.
Вхідні дані. Один рядок довжиною не більше 10^5, що складається лише з символів та .
Вихідні дані. Виведіть найменшу можливу довжину рядка, який Хусейн міг спочатку мати.
01010010810011101Дано масив , відсортований у зростаючому порядку та що містить цілих чисел. Визначте, чи існує пара чисел (A_i, A_j), де i < j, така що їхня сума дорівнює .
Вхідні дані. Перший рядок містить два цілі числа n~(n \le 10^5) та x~(x \le 10^6). Другий рядок містить невід'ємних цілих чисел, кожне з яких не більше 10^6.
Вихідні дані. Виведіть "YES", якщо така пара елементів існує, і "NO" в іншому випадку.
10 13
1 3 5 6 8 10 11 11 11 16YES8 61
5 5 8 12 16 21 44 50NOДано масив цілих чисел та ціле число . Знайдіть трійку чисел (A_i, A_j, A_k) у масиві, чия сума дорівнює . Всі індекси i, j, k повинні бути різними.
Вхідні дані. Перший рядок містить розмір масиву n~(n \le 3 \cdot 10^4) та значення x~(|x| \le 10^9). Другий рядок містить цілих чисел, кожне з яких не перевищує 10^8 за абсолютним значенням.
Вихідні дані. Якщо потрібна трійка існує, виведіть її в будь-якому порядку. Якщо існує кілька трійок, виведіть будь-яку з них. Якщо бажана трійка не існує, виведіть .
8 19
20 3 5 1 15 7 17 121 3 15Дано відсортований масив з цілих чисел. Для кожного індексу знайдіть кількість елементів у масиві, які лежать між A_i та 2 \cdot A_i включно.
Вхідні дані. Перший рядок містить розмір n~(n \le 10^5) масиву . Другий рядок містить цілих чисел, які перебувають у відсортованому порядку.
Вихідні дані. Виведіть цілих чисел. Для кожного індексу i~(1 \le i \le n) масиву виведіть кількість елементів, які лежать між A_i та 2 \cdot A_i включно.
10
1 2 3 4 5 6 7 8 9 102 3 4 5 6 5 4 3 2 1Вдоль прекрасного Адріатичного узбережжя знаходяться готелів. Кожен готель має свою вартість у євро. Петро виграв євро в лотереї. Тепер він хоче купити послідовність сусідніх готелів один за одним так, щоб сума витрат на ці сусідні готелі була якомога більшою, але не перевищувала .
Вам потрібно обчислити цю максимальну можливу загальну вартість.
Вхідні дані. Перший рядок містить два цілі числа та m~(1 \le n \le 3 \cdot 10^5, 1 \le m < 2^{31}). Наступний рядок містить позитивних цілих чисел, які представляють витрати на готелі в порядку їх розташування уздовж узбережжя.
Вихідні дані. Виведіть бажану максимальну вартість (вона буде більшою за в усіх тестах).
5 12
2 1 3 4 512Дано масив з позитивних цілих чисел, знайдіть кількість підмасивів, сума яких дорівнює .
Вхідні дані. Перший рядок містить розмір масиву n~(1 \le n \le 2 \cdot 10^5) та цільову суму x~(1 \le x \le 10^9). Наступний рядок містить цілих чисел a_1, a_2, \ldots, a_n~(1 \le a_i \le 10^9) — вміст масиву.
Вихідні дані. Виведіть необхідну кількість підмасивів.
5 7
2 4 1 2 73Зія візьме участь у конкурсі послідовностей завтра. Число x \ge 0 називається вершиною деякої послідовності, якщо послідовність 1, 2, 3, ..., x - 1, x, x - 1, ..., 3, 2, 1 є підпослідовністю цієї послідовності. Сила кожної послідовності вважається її найбільшою вершиною.
Завтра всі студенти візьмуть участь у конкурсі, а переможець найсильнішої послідовності буде переможцем. Зія має послідовність a_1, a_2, a_3, ..., a_n. Він хоче зайняти систему оцінювання конкурсу, видаливши з неї послідовності з більшою силою, ніж у себе. Однак Зія не знає сили своєї власної послідовності, але дуже хоче виграти. Допоможіть йому обчислити силу своєї послідовності.
Вхідні дані. Перший рядок містить число n~(1 \le n \le 10^5) чисел у послідовності Зії. Наступний рядок містить цілих чисел a_i~(1 \le a_i \le 10^5) — елементи послідовності.
Вихідні дані. Виведіть одне число — силу даної послідовності.
2
2 1003
1 2 315
1 10 2 3 12
Коментарі5