Skip to content

Conversation

@ShinHeeEul
Copy link
Contributor

🧷 문제 링크

https://www.acmicpc.net/problem/2104

🧭 풀이 시간

120 분

👀 체감 난이도

✏️ 문제 설명

크기가 N(1 ≤ N ≤ 100,000)인 1차원 배열 A[1], …, A[N]이 있다. 어떤 i, j(1 ≤ i ≤ j ≤ N)에 대한 점수는, (A[i] + … + A[j]) × min{A[i], …, A[j]}가 된다. 즉, i부터 j까지의 합에 i부터 j까지의 최솟값을 곱한 것이 점수가 된다.

배열이 주어졌을 때, 최대의 점수를 갖는 부분배열을 골라내는 프로그램을 작성하시오.

🔍 풀이 방법

세그 트리에 최솟값과 최솟값을 갖는 인덱스를 함께 저장한다.
최솟값을 갖는 인덱스를 기준으로 구간을 분할하고, 해당 구간의 넓이를 계산한다.
해당 구간을 기준으로 다시 최솟값을 찾는 로직을 반복한다.

⏳ 회고

히스토그램이랑 같은 문젠데, 히스토그램 때도 못풀어서 해설 봤었는데 이번에도 보게 되었다.. 세그 트리에 업데이트 기준과 안의 값을 다르게 할 수 있음도 항시 염두해두자!

@ShinHeeEul ShinHeeEul added fail 😢 해설을 보고 풀었거나, 못 풀었을 때 hint 💡 반례를 참고했거나 힌트를 얻고 풀었을 때 timeout ⌚ 목표 시간보다 오래걸렸을 때 labels Feb 25, 2025
@ShinHeeEul ShinHeeEul self-assigned this Feb 25, 2025
@ShinHeeEul ShinHeeEul merged commit 4e1f500 into main Feb 25, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

fail 😢 해설을 보고 풀었거나, 못 풀었을 때 hint 💡 반례를 참고했거나 힌트를 얻고 풀었을 때 timeout ⌚ 목표 시간보다 오래걸렸을 때

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants