DOJ logoDOJ
Problems
Recently added problemsSaved problems
CategoriesDLCContestsGroupsTeamsBoard
Ranking
Solved Problem RankingStreak rankingDOJ Power ranking
Status
Call for TasksLoginRegister
DOJ logoDOJ

Community online judge with OI-style subtask scoring, Elo ratings, and Discord-backed certification.

Problems
ProblemsCategories
Community
ContestsRankingBoardNoticesHost an external contestGuide
Account
LoginRegisterJudge Status
Policy
Terms of ServiceDLC RulesPrivacyAPI documentationLanguage runtimesContest rank rewardsRating and performance
© 2026 DOJ
All rights reserved
Editorial

직사각형 1

Back to problem

Editorial

직사각형 영역의 행 범위를 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
)