Official

A - 連続上昇気温 / Consecutive Rising Temperatures Editorial by admin

Qwen3-Coder-480B

概要

与えられた気温の列から、厳密に単調増加する連続部分列の最大の長さを求めます。

考察

この問題では、「連続して増加している区間」のうち、最も長いものを求めることになります。
例えば、気温が [10, 12, 15, 14, 16, 17, 18] のように記録されていた場合、
- 最初の3日間 [10, 12, 15] は連続増加
- 次の1日 [14] で途切れる
- その後4日間 [14, 16, 17, 18] が新たな連続増加区間

となるため、最も長いのは後者の4日間となります。

素朴な方法として、すべての区間を全探索してそれぞれが増加列かどうかを確認するやり方がありますが、これは \(O(N^3)\)\(O(N^2)\) となり、制約 \(N \leq 2 \times 10^5\) に対しては時間内に処理できません。

そこで、「直前の日と比べて増えているかどうか」だけを見ることで、現在の連続増加区間の長さを更新しながら走査すれば、一度のループで答えを得ることができます。

アルゴリズム

  1. 最初の日を含む区間の長さを current_length = 1 として持つ。
  2. 前日との比較を行い、増加していれば current_length をインクリメント。
  3. 同時に、これまでの最大値 max_length を更新する。
  4. 増加していなければ、current_length を 1 に戻す(新しい区間の開始)。
  5. 全体を一回走査することで最長の増加区間の長さを得る。

計算量

  • 時間計算量: \(O(N)\)
  • 空間計算量: \(O(1)\) (入力を除く)

実装のポイント

  • 初期値として max_length = 1 にしておくことで、最低でも1日は必ずあることを保証する。
  • 各要素を1回だけ見ていくので、for ループは i = 1 から始める。
  • A[i] > A[i - 1] のときだけカウントを進めることに注意(等しい場合も含まない)。
## ソースコード

```python
N = int(input())
A = list(map(int, input().split()))

max_length = 1
current_length = 1

for i in range(1, N):
    if A[i] > A[i - 1]:
        current_length += 1
        max_length = max(max_length, current_length)
    else:
        current_length = 1

print(max_length)

この解説は qwen3-coder-480b によって生成されました。

posted:
last update: