DOJ logoDOJ
题目
最近添加的题目收藏的题目Workbooks
分类DLC比赛小组团队讨论区
排名
解题数量排行榜连续解题排名DOJ Power 排行榜
评测状态
征题登录注册
DOJ logoDOJ

支持 OI 子任务计分、Elo 等级分和 Discord 认证的社区在线评测系统。

题目
题目列表分类
社区
比赛排名讨论区公告举办外部比赛指南
账号
登录注册评测状态
政策
服务条款DLC 使用规则隐私政策API 文档语言运行环境比赛排名奖励评级与表现
© 2026 DOJ
保留所有权利
题解

직사각형 1

返回题目

题解

직사각형 영역의 행 범위를 x1x_1x1​부터 x2x_2x2​까지, 열 범위를 y1y_1y1​부터 y2y_2y2​까지 골랐다고 하자.

이때 가중치 합은 다음과 같다.

∑i=x1x2∑j=y1y2AiBj=(∑i=x1x2Ai)(∑j=y1y2Bj)\sum_{i=x_1}^{x_2}\sum_{j=y_1}^{y_2} A_iB_j = \left(\sum_{i=x_1}^{x_2} A_i\right) \left(\sum_{j=y_1}^{y_2} B_j\right)i=x1​

따라서 문제는 AAA의 연속부분수열 합 하나와 BBB의 연속부분수열 합 하나를 골라 두 값의 곱을 최대로 만드는 문제와 같다.

각 수열에 대해 필요한 값은 연속부분수열 합의 최솟값과 최댓값이다. AAA의 연속부분수열 합의 최솟값과 최댓값을 각각 minA,maxA\mathrm{minA}, \mathrm{maxA}minA,maxA라 하고, BBB에 대해서도 minB,maxB\mathrm{minB}, \mathrm{maxB}minB,maxB라 하자.

정답은 다음 네 값 중 최댓값이다.

minAminB,minAmaxB,maxAminB,maxAmaxB\mathrm{minA}\mathrm{minB},\quad \mathrm{minA}\mathrm{maxB},\quad \mathrm{maxA}\mathrm{minB},\quad \mathrm{maxA}\mathrm{maxB}minAminB,minAmaxB,maxAminB,maxA

연속부분수열은 비어 있을 수 없다는 점에 주의해야 한다.

연속부분수열 합의 최댓값과 최솟값은 카데인 알고리즘으로 각각 O(N)O(N)O(N), O(M)O(M)O(M)에 구할 수 있다. 정답의 절댓값은 최대 4×10184 \times 10^{18}4×1018이므로 6464비트 정수를 사용해야 한다.

전체 시간 복잡도는 O(N+M)O(N+M)O(N+M)이다.

∑
x2​
​
j=y1​∑y2​​
Ai​
Bj​
=
(i=x1​∑x2​​Ai​)(j=y1​∑y2​​Bj​
maxB
64
)