[BOJ] 14180번: 배열의 특징

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


수를 하나 이동했을 때 값이 얼마나 달라지는지를 생각해봅시다.


우선 $S_i = A_1+A_2+..+A_i$라고 두고, a번째 위치에 있던 원소를 b번째로 옮길 때, a가 b보다 큰 경우(=왼쪽으로 옮기는 경우)에는 $S_{a-1}-S_{b-1}-(a-b)A_a$만큼 변화하고 a가 b보다 작은 경우(=오른쪽으로 옮기는 경우)에는 $S_a-S_b+(b-a)A_a$만큼 변화합니다. 왼쪽으로 옮기는 경우와 오른쪽으로 옮기는 경우의 식이 다르기 때문에 각각에 대해 정리를 해보면 기울기가 $b$이고 y절편이 $S_{b-1} or S_b$인 식을 얻을 수 있게 되고 이를 이용해 Convex Hull Trick을 적용하면 됩니다.


https://github.com/blisstoner/BOJ/blob/master/14180.cpp

'알고리즘 > BOJ' 카테고리의 다른 글

[BOJ] 14177번: 티떱랜드  (0) 2018.07.26
[BOJ] 13262번: 수열의 OR 점수  (0) 2018.07.26
[BOJ] 13261번: 탈옥  (0) 2018.07.26
[BOJ] 4008번: 특공대  (0) 2018.07.25
[BOJ] 14240번: 부분 수열의 점수  (0) 2018.07.24
[BOJ] 13263번: 나무 자르기  (0) 2018.07.24
  Comments