Если я всё верно понял, то вторую задачу можно решить другим способом, который работает за то же время, но к нему легче придти (как по мне).
Идём слева направо. Будем хранить сет из пар {значение элемента, индекс элемента} на префиксе. Для очередного индекса i выполним следующее: пока i-ый элемент превышает минимальное значение в сете хотя бы в 2 раза, он будет ответом для соответствующего элемента, для которого мы сохраним ответ и вырежем его из сета. После этого добавим сам i-ый элемент в сет.
Для всех элементов, которые после прохода по массиву так и останутся в сете, ответом будет None.
Если я всё верно понял, то вторую задачу можно решить другим способом, который работает за то же время, но к нему легче придти (как по мне).
Идём слева направо. Будем хранить сет из пар {значение элемента, индекс элемента} на префиксе. Для очередного индекса i выполним следующее: пока i-ый элемент превышает минимальное значение в сете хотя бы в 2 раза, он будет ответом для соответствующего элемента, для которого мы сохраним ответ и вырежем его из сета. После этого добавим сам i-ый элемент в сет.
Для всех элементов, которые после прохода по массиву так и останутся в сете, ответом будет None.