DOJ logoDOJ
問題
最近追加された問題保存した問題Workbooks
カテゴリDLCコンテストグループチーム掲示板
ランキング
正解数ランキングストリークランキングDOJ Powerランキング
提出状況
問題募集ログイン新規登録
DOJ logoDOJ

OI形式のサブタスク採点、Eloレーティング、Discord連携を備えたオンラインジャッジです。

問題
問題一覧カテゴリ
コミュニティ
コンテストランキング掲示板お知らせ外部のコンテストを開催するガイド
アカウント
ログイン新規登録ジャッジ状態
ポリシー
利用規約DLCの利用規則プライバシーAPI 文書言語ランタイムコンテストの順位報酬レーティングとパフォーマンス
© 2026 DOJ
All rights reserved
解説

Maximum Subarray Problem

問題に戻る

解説

서브태스크 111에서는 모든 (l,r)(l,r)(l,r)에 대해 구간 합을 처음부터 계산할 수 있다. 시간 복잡도는 O(N3)O(N^3)O(N3)이다.

서브태스크 222에서는 누적합 Pi=A1+⋯+AiP_i=A_1+\cdots+A_iPi​=A1​+⋯+A를 계산한다. 각 구간 합을 Pr−Pl−1P_r-P_{l-1}Pr​−Pl−1​로 구하면 시간 복잡도는 O(N2)O(N^2)O(N2)이다.

전체 문제에서는 iii에서 끝나는 비어 있지 않은 부분 배열의 합의 최댓값을 DiD_iDi​라고 하자. 마지막 원소만 선택하거나, i−1i-1i−1에서 끝나는 최적 부분 배열에 AiA_iA를 붙일 수 있으므로

D1=A1,Di=max⁡(Ai,Di−1+Ai)(2≤i≤N)D_1=A_1,\qquad D_i=\max(A_i,D_{i-1}+A_i)\quad(2\leq i\leq N)D1​=A1​,D

이다. 답은 모든 DiD_iDi​의 최댓값이다. 초기값을 000이 아닌 A1A_1A1​로 두어야 모든 원소가 음수인 경우도 처리할 수 있다. 가능한 합이 3232비트 정수 범위를 넘으므로 비트 정수를 사용한다.

전체 문제의 시간 복잡도는 O(N)O(N)O(N)이고 추가 공간 복잡도는 O(1)O(1)O(1)이다.

Solution written by GPT6

i
​
i
​
i​
=
max(Ai​,Di−1​+
Ai​)(2≤
i≤
N)
32
646464