Дан массив `a` длины `n` и диапазон значений элементов от 1 до `k`. Нужно найти подотрезок длины `k`, который содержит все числа от 1 до `k`. Если такой подотрезок существует, нужно вывести его начальную позицию. Если такого подотрезка нет, нужно вывести 1. Если возможно несколько ответов, нужно вывести минимальный из них.
Для решения этой задачи мы будем использовать два указателя: `left` и `right`.
Начнем с `left = 1` и `right = k`.
Будем проверять, содержит ли текущий подотрезок числа от 1 до `k`. Для этого используем множество `count`, в котором будем хранить количество уникальных элементов в текущем подотрезке.
1. Проходим по первым `k` элементам массива и для каждого элемента увеличиваем его счетчик в `count`.
2. Если количество уникальных элементов в `count` равно `k`, значит, текущий подотрезок содержит все числа от 1 до `k`. Выводим позицию `left` и завершаем программу.
3. Если `count` не равно `k`, увеличиваем `right` на 1 и переходим к следующему шагу.
4. Если `right` становится больше `n`, то подотрезок длины `k` не существует, выводим 1 и завершаем программу.
5. Иначе, увеличиваем `left` и уменьшаем значение счетчика элемента `a[left-1]` в `count`. Переходим к шагу 2.
Алгоритм имеет линейную сложность времени, так как каждый элемент массива обрабатывается только один раз. Всего выполняется не более `n` итераций, поэтому алгоритм эффективен для массивов длины до 2*10^5.