公式

B - Nearest Taller 解説 by sounansya


\(i\) について、人 \(i\) より左に人 \(i\) より身長が高い人がいるか、またいる場合はその中で人 \(i\) に最も近い人が誰かを求める問題です。

この問題の答えは以下のように求めることができます。

  • \(i-1\) が人 \(i\) より身長が高いか調べる。もし人 \(i-1\) の方が高いなら問題の答えは \(i-1\) であり、探索を終了する。
  • \(i-2\) が人 \(i\) より身長が高いか調べる。もし人 \(i-2\) の方が高いなら問題の答えは \(i-2\) であり、探索を終了する。

\(\vdots\)

  • \(1\) が人 \(i\) より身長が高いか調べる。もし人 \(1\) の方が高いなら問題の答えは \(1\) であり、探索を終了する。
  • ここまで探索して答えが見つからなかった場合は人 \(i\) より左に人 \(i\) より身長が高い人は存在しない。したがって、答えは \(-1\) である。

これは for 文を逆順にループさせることで求めることができます。

以上を適切に実装することでこの問題の答えを求めることができます。二重 for 文の実装に注意してください。

実装例(Python3)

n = int(input())
a = list(map(int, input().split()))
for i in range(n):
    ans = -1
    for j in range(i - 1, -1, -1):
        if a[j] > a[i]:
            ans = j + 1
            break
    print(ans)

投稿日時:
最終更新: