메이플스토리의 맵은 2차원 평면에 x축에 평행인 여러 선분들이 공중에 떠 있는 형태로 이루어져 있다.

맵에 선분 개가 있고, 각 선분에는 부터 까지 번호가 매겨져 있다. 선분 의 높이는 이며, 양 끝 점의 x좌표는 와 다.
개의 선분 외에 땅이 있다. 땅은 인 직선이며, 편의상 선분 으로 볼 수 있다. 즉, , , 이다.
게임 캐릭터는 한 선분에서 시작해서, 적절히 낙하하며 땅까지 내려가려고 한다. 캐릭터는 선분의 임의의 위치에서 낙하할 수 있다. 낙하하는 경우 캐릭터는 y축에 평행하도록 직선 낙하한다. 낙하하면서 만나는 선분 중간 혹은 양 끝 점에 착지할 수 있고, 착지하지 않고 그대로 낙하할 수도 있다. 만약, 선분 위에 착지한 경우 그 선분 위에서 좌우로 마음대로 이동할 수 있다.
캐릭터가 선분 위에 착지할 때 낙하 데미지를 받게 된다. 높이가 인 선분 에서 낙하하여, 높이가 인 선분 위에 착지할 경우, 받는 낙하 데미지는 이다. 여기서, 는 선분 의 고유 추가 낙하 데미지 값이다. 땅의 고유 추가 낙하 데미지 값 은 이다.
모든 선분에 대해 그 선분의 임의의 위치에서 시작한 캐릭터가 땅까지 내려갈 때 받는 낙하 데미지의 최솟값을 구하라.
입력 형식
첫 줄에 맵에 있는 선분의 수를 나타내는 정수 이 주어진다. ()
둘째 줄부터 각 줄에 선분 의 높이와, 양 끝 점의 x좌표, 그리고 고유 추가 낙하 데미지를 나타내는 네 정수 , , , 가 공백으로 구분되어 주어진다. ( ; )
주어지는 모든 선분은 서로 겹치거나 끝 점에서 만나지 않게 주어진다.
출력 형식
번째 줄에 선분 의 임의의 위치에서 시작한 캐릭터가 땅까지 내려갈 때 받는 낙하 데미지의 최솟값을 출력한다.
예제
입력
4 2 10 12 1 3 3 6 0 1 1 8 10 4 5 14 0
출력
4 9 1 9
예제 설명

선분 과 선분 에서는 낙하하여 바로 땅에 착지할 경우 각각 과 만큼의 낙하 데미지를 받는다. 선분 에서 낙하하여 선분 에 착지 후 다시 땅으로 낙하할 경우, 총 만큼 낙하 데미지를 받는 반면, 바로 땅으로 낙하할 경우 만큼 낙하 데미지를 받는다. 선분 에서 선분 로 낙하하고, 선분 에서 땅으로 낙하할 경우, 총 만큼 낙하 데미지를 받는다.
채점 방식
입력 케이스들은 다음과 같은 종류로 구별되며, 한 종류의 케이스를 다 맞추어야 그 종류에 배정된 점수를 받을 수 있다.
종류 1: 14점
종류 2: 23점
모든 에 대해
종류 3: 44점
종류 4: 19점
추가적인 제한 조건이 없음.
해설
다음과 같은 DP 배열을 정의하자.
선분 에서 시작한 캐릭터가 땅까지 도달할 때, 받는 낙하 데미지의 최솟값
땅을 선분 이라고 할 때, DP의 초기값은 이다. 점화식은 다음과 같다.
(여기서 는 선분 에서 낙하하면서 만나는 모든 선분)
일반적으로 이 DP는 시간에 쉽게 해결할 수 있지만, 이 문제에서는 더 빠른 시간을 요구한다. 위 점화식을 좀더 풀어 전개해보자.
이 점화식은 Convex Hull Optimization(혹은 Convex Hull Trick, CHT)이 가능한 꼴이다. 선분들의 번호가 좌표에 대해 오름차순으로 정렬되어 있다고 하면, 가 증가함에 따라 도 증가하고, 마찬가지로 가 증가함에 따라 도 증가한다. 즉, 스택과 포인터 하나를 이용하여 선형 시간에 CHT가 가능한 상황이다.
다만 이 문제에서 의 조건이 단순히 인 모든 가 아니라, 선분 에서 낙하하면서 만날 수 있는 모든 다. 이를 위해 Segment Tree를 활용해야 한다. Segment Tree의 각 정점에서 두 개의 CHT를 가지고 있는다. 하나는 그 정점의 자식 정점에 추가된 모든 에 대해 CHT를 가지고 있고, 다른 하나는 그 정점이 표헌하는 좌표 범위에 추가된 모든 j에 대해 CHT를 가지고 있는다. 이렇게 CHT를 스택과 포인터를 통해 선형 시간으로 구현하면 전체 시간복잡도는 이 되며 이 문제를 해결할 수 있다.
만약 CHT를 Li-Chao 트리 등으로 구현하게 되면 전체 시간복잡도는 이 되어 인 서브태스크만 통과한다.