| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 10 초 | 2048 MB | 85 | 11 | 7 | 10.145% |
울창한 두 숲 KOI 숲과 IOI 숲에는 많은 나무들이 우거져 있다. KOI 숲에는 $0$번부터 $N-1$번까지, 총 $N$개의 나무가 왼쪽에서 오른쪽으로 일렬로 줄지어 있으며, IOI 숲에는 $0$번부터 $M-1$번까지 총 $M$개의 나무가 같은 방식으로 일렬로 줄지어 있다. KOI 숲의 $i$ ($0 \le i \le N-1$)번 나무의 높이는 $A[i]$, IOI 숲의 $j$ ($0 \le j \le M-1$)번 나무의 높이는 $B[j]$이다.
당신의 부족은 외딴 섬에서 바다의 신께 기도를 드리는 오랜 전통을 가지고 있으며, 그 의식을 치르기 위해 뗏목을 만들어야 한다. 당신은 두 숲에서 나무를 벌목하여 뗏목을 제작하기로 하였다.
뗏목을 타고 섬까지 가는 것은 매우 위험하기 때문에, 당신은 뗏목을 최대한 안정적으로 만들고자 한다. 뗏목은 나무들을 옆으로 이어붙여 만들며, 그 안에 포함되는 직사각형 모양의 면적이 클수록 안정적이다. 구체적으로, 뗏목을 구성하는 나무의 높이가 왼쪽에서부터 $H[0], H[1], \ldots, H[L-1]$이라고 할 때, 뗏목의 안정성은
\[ \max_{0 \le s \le l \le L-1} \bigl(\min(H[s], \ldots, H[l]) \times (l - s + 1)\bigr) \]
의 값으로 정의된다. 즉, 가능한 모든 연속된 구간 $[s, l]$에 대해 그 구간에 포함되는 나무들의 최소 높이를 구하고, 그 높이에 구간 너비인 $(l-s+1)$를 곱했을 때의 최댓값을 의미한다.
부족의 전통에 따라, 뗏목을 구성하는 나무들은 다음과 같은 규칙을 따라야 한다.
KOI 숲의 나무들은 $0$번부터 $N-1$번까지 $N$그루 모두를 모두 벌목하기로 결정되었다. 그러나, IOI 숲에서 어떤 나무들을 벌목할지는 아직 결정되지 않았다. 당신은 $0$부터 $Q-1$ 까지 번호 붙여진 $Q$개 질의에 답해야 한다. 질의들은 길이 $Q$의 배열 $L$과 $R$로 표현된다. 질의 $k(0 \le k \le Q-1)$의 답은 IOI 숲에서 번호가 $L[k]$ 이상 $R[k]$ 이하인 나무들을 벌목하는 경우 얻을 수 있는 뗏목의 가능한 최대 안정성이다.
여러분은 아래 함수를 구현해야 한다.
std::vector<long long> max_stability(std::vector<int> A, std::vector<int> B, std::vector<int> L, std::vector<int> R
제출하는 소스 코드의 어느 부분에서도 입출력 함수를 실행해서는 안 된다.
$N = 5$, $M = 4$, $Q = 2$, $A = [3, 3, 1, 6, 1], B = [3, 5, 7, 6], L = [0, 0]$, $R = [1, 3]$인 경우를 생각해 보자.
그레이더는 다음과 같이 함수를 호출한다.
max_stability([3, 3, 1, 6, 1], [3, 5, 7, 6], [0, 0], [1, 3])
$L[0] = 0, R[0] = 1$인 경우 뗏목의 최대 안정성은 $12$이다. $12$의 안정성을 얻는 방법 중 하나는 다음과 같다:
$L[0] = 0, R[0] = 3$인 경우 뗏목의 최대 안정성은 $20$이다. $20$의 안정성을 얻는 방법 중 하나는 다음과 같다:
따라서 함수는 $[12, 20]$를 반환하여야 한다.
그레이더는 다음과 같이 함수를 호출한다.
max_stability([9, 9, 9, 9, 9], [1, 2, 3, 4, 5, 6, 7, 8], [0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 2, 3, 4, 5, 6, 7])
함수는 $[45, 45, 45, 45, 45, 45, 45, 49]$을 반환하여야 한다.
그레이더는 다음과 같이 함수를 호출한다.
max_stability([1000000000, 1000000000, 1000000000], [1000000000, 1000000000], [0], [1])
함수는 $[5000000000]$을 반환하여야 한다.
Sample grader는 아래와 같은 형식으로 입력을 받는다.
Sample grader는 다음을 출력한다.
max_stability가 반환한 정수 배열을 $C$라 할 때 $C[k]$의 값Sample grader는 실제 채점에서 사용하는 그레이더와 다를 수 있음에 유의하라.
Olympiad > 국제정보올림피아드 대표학생 선발고사 > 2025 > 2차 선발고사 4번
C++17, C++20, C++23, C++26, C++17 (Clang), C++20 (Clang)