Два указателя, сортировка и бинарный поиск (24 сентября 2015)
- [7 минут] Для каждого числа первого массива определить, есть ли оно во втором
- Сортировка и бинпоиск
- Два указателя
- Хеш-таблица
- [26 минут] Задачи на два указателя
- Найти самый длинный подотрезок с суммой не более S
- Найти самый длинный подотрезок, на котором не более K нулей
- Найти самый длинный подотрезок, на котором не более K различных чисел
- Найти в массиве такие i, j, k : ai + aj + ak = S, O(N2)
- Даны N различных натуральных чисел, сколько существует треугольников с такими длинами сторон? O(N2)
- Операции с множествами и мультимножествами, как сортированными массивами: пересечение, объединение, разность, merge [code]
- [16 минут] Правильный бинпоиск. C кодом на C++: [code]
- lower_bound
- Граничное значение монотонного предиката, который в [-1] не верен, а в [n] верен
- lower_bound → первый больший x, последний равный x
- C++: lower_bound, upper_bound, binary_search [code] Java: binarySearch
- [40 минут] Задачи на бинпоиск
- Дан массив. Запрос: найти в массиве количество чисел от L до R.
- Дан массив. Запрос: найти в массиве количество чисел равных X на позициях от L до R.
- Дан массив. Запрос: найти позицию первого вхождения X. Пусть ответ равен K, найти за O(logK). (Бинарный поиск не хуже линейного)
- Даны N верёвок длин a1, ... aN; можно их резать, склеивать нельзя. Какой максимальной длины L мы сможем получить K кусков длины L?
- Даны N точек на прямой. Выбрать K из них, максимизировать минимальное расстояние между ближайшими
- Троичный поиск: дан массив A такой, что A[1] < A[2] < ... < A[k] > A[k+1] > ... > A[n], k неизвестно. Найти k за O(logn)
- Поиcк вещественного корня многочлена нечётной степени
- [не успеем] Даны N точек на плоскости. Запрос: точка (X, Y), найти ближайшую по X с таким же Y.
- [не успеем] Даны N точек xi на прямой. Сопоставить им числа от 1 до N, чтобы было верно (pi < pj) == (xi < xj)
- [1 минута] Сложные задачи (ai, bi > 0)
- [не успеем] Поиск всех вещественных корней многочлена
- [не успеем] Даны n натуральных пар (ai, bi), выбрать k из них такие, что (∑ ai) / (∑ bi) → max
- [не успеем] Даны n натуральных пар (ai, bi), выбрать k из них такие, что (∑ ai) × (∑ bi) → max