11476. Турнір на виліт


Відправити розв'язок

Бали: 100
Time limit: 2.0s
Memory limit: 500M

Author:
Problem type
Allowed languages
C++, Java, Pascal, Python

\(2^N\) гравців, позначені від 1 до \(2^N\), змагатимуться один з одним у турнірі з програмування на виліт. Рейтинг гравця \(i\) – \(A_i\). Будь-які два гравці мають різні рейтинги, і турнір між двома гравцями завжди призводить до перемоги гравця з вищим рейтингом.

Турнір виглядає як ідеальне бінарне дерево.

Формально турнір проходитиме так:

  • Для кожного цілого числа \(i = 1, 2, 3, \dots, N\) в такому порядку відбувається наступне.

    • Для кожного цілого числа \(j\) (\(1 \le j \le 2^{N - i}\)), серед гравців, які ніколи не програвали, гравець (\(2j - 1\))-й та гравець з \(2j\)-й грають один проти одного.

Знайдіть індекс гравця, який займе друге місце, тобто програє у фінальному матчі.

Формат вхідних даних

Перший рядок містить ціле число \(N\) (\(1 \le N \le 16\))

Наступний  рядок містить \(2^N\) цілих чисел \(A_i\) (\(1 \le A_i \le 10^9\), \(A_i\) попарно різні)

Числа у рядках розділяються пропуском.

Формат вихідних даних

У вихідний потік виведіть шуканий індекс.

Примітка

До прикладу 1:

Спочатку відбудуться два турніри між гравцями 1 і 2 і між гравцями 3 і 4. За рейтингом переможуть гравці 2 і 4.

Потім відбудеться турнір між гравцями 2 і 4, і турнір завершиться тим, що гравець 4 стане чемпіоном.

Гравець, який програє у фінальному матчі, — це гравець 2.

Приклад вхідних даних

2
1 4 2 5

Приклад вихідних даних

2

Приклад вхідних даних

2
3 1 5 4

Приклад вихідних даних

1

Приклад вхідних даних

4
6 13 12 5 3 7 10 11 16 9 8 15 2 1 14 4

Приклад вихідних даних

2

Коментарі

Ще немає коментарів.