Поиск

Число Демида


Ограничение времени - 1 секунда

Ввод - стандартный ввод или input.txt

Ограничение памяти - 256Mb

Вывод - стандартный вывод или output.txt

Будем называть $$$i$$$-й элемент последовательности $$$a_1, a_2, \dots, a_N$$$ числом Демида, если количество элементов, меньших или равных $$$a_i$$$ среди элементов $$$a_1, a_2, \dots, a_{i-1}$$$, больше или равно количеству элементов, больших или равных $$$a_i$$$ среди элементов $$$a_{i+1}, a_{i+2},\dots, a_N$$$. В последовательности может быть несколько чисел Демида. Напишите программу, которая находит минимальный индекс числа Демида.

Входные данные

Первая строка ввода содержит одно целое число $$$N~(1\le N \le 100000)$$$. Вторая строка ввода содержит $$$N$$$ целых чисел в диапазоне от 1 до $$$10^9$$$, разделенных пробелами — последовательность $$$a_1,a_2, \dots , a_N$$$.

Выходные данные

В единственной строке вывести ответ на задачу.

Примеры

Входные данные
4
1 2 5 10
Выходные данные
3
Входные данные
4
10 5 2 1
Выходные данные
1

Для каждого $$$a_i$$$ посчитаем количество чисел левее и не больше нас, а так же чисел правее и не меньше нас. Если же первое количество больше или равно второму, то выводим ответ. Но такое решение работает за $$$O(N^2)$$$, что приводит к превышению времени работы.

Давайте ускорим решение, будем поддерживать нужные множества чисел слева от текущего числа и справа. Когда переходим к соседнему числу, то перекидываем из правого множества, число в левое. Если наше множество сможет за быстро говорить, сколько чисел больше заданного числа, то мы решили нашу задачу. В качестве таких множеств, можно взять декартовое дерево, или множества с порядковой статистикой, которое есть в C++.


Для отправки решения задачи необходимо авторизоваться!