반응형

i-1에서 최대값이 존재했다면, 현재 i 노드부터 마지막 노드 까지의 최대값을 매번 갱신해야하는 문제이다.
그대로 구현할 경우에는 시간복잡도가 n*m*v가 되므로, 다른 방식을 사용해야한다.
매번 최대값을 찾는 것이 아니라, 매 테스트 케이스 시작에서 각 배열에 맞는 최대값을 미리 구해놓는다.
노드의 시작점부터 구하는 것이 아니라, 마지막 노드부터 내려가면서 구해야한다.
#include <iostream>
#include <algorithm>
int list[1000001] = {};
int listMax[1000001] = {};
int main() {
std::ios::sync_with_stdio(0);
std::cin.tie(0);
int n;
std::cin >> n;
while (n--) {
int m;
std::cin >> m;
int k = 0;
for (int i{ 0 }; i < m; i++) {
std::cin >> list[i];
k = std::max(k, list[i]);
}
int q = 0;
for (int i{ m - 1 }; i >= 0; i--) {
if (q < list[i]) q = list[i];
listMax[i] = q;
}
long long ans = 0;
for (int i{ 0 }; i < m; i++) {
ans += listMax[i] - list[i];
}
std::cout << ans << "\n";
}
}반응형
'백준 알고리즘' 카테고리의 다른 글
| [백준 알고리즘] 2170 C++ 선긋기 (0) | 2025.01.24 |
|---|---|
| [백준 알고리즘] 11000 C++ 강의실 배정 (0) | 2025.01.22 |
| [백준 알고리즘 C++] 21940번: 가운데에서 만나기 (0) | 2024.11.11 |
| C++ 백준 1916: 최소비용 구하기 (0) | 2024.10.31 |
| [c++ 알고리즘] 백준 1759: 암호 만들기 (0) | 2024.09.12 |