만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

소떡소떡

시간 제한2초메모리 제한1024 MB

요약
세로선 하나에 걸린 음식을 모두 꿸 때 소시지와 떡이 높이 순서대로 번갈아 나오는 경우의 길이 합 최댓값을 구합니다.
난이도

보통10점 중 7점

유형
세그먼트 트리, 동적 계획법, 정렬
정답자
아직 제출이 없습니다

문제

그릴에 소시지 또는 가래떡 NN개가 구워지고 있다. 그릴의 인접한 두 가로줄 사이의 거리와 인접한 두 세로줄 사이의 거리는 모두 11로 같고 그릴의 가로줄과 세로줄은 서로 수직이다. 그릴의 가로줄을 아래쪽부터 1,2,⋅⋅⋅1, 2, \cdot\cdot\cdot번으로 매기고 그릴의 세로줄을 왼쪽부터 1,2,⋅⋅⋅1, 2, \cdot\cdot\cdot번으로 매겼을 때 ii번째 음식물은 y_iy\_i번 가로줄에 나란히 놓여 있으며 xl_ixl\_i번부터 xr_ixr\_i번 세로줄에 걸쳐 있다. ii번째 음식물의 길이는 xr_i−xl_i+1xr\_i - xl\_i + 1이고 모든 음식물은 서로 겹치지 않게 놓여 있다. 그릴은 모든 음식물을 구울 수 있을 만큼 충분히 크다.

두께가 없는 꼬치 하나를 그릴의 세로줄과 겹치게 꽂아서 소떡소떡을 만들려고 한다. 소떡소떡을 만들려면 꼬치에 음식물을 1개 이상 꽂아야 하며, 음식물은 꼬치에 꽂힌 순서대로 소시지와 가래떡이 번갈아 나와야 한다. 맨 처음에 꽂는 음식물은 소시지여도 되고 가래떡이어도 된다.

소떡소떡의 크기는 꽂힌 음식물의 길이의 합과 같다. 소떡소떡의 가치는 크기에 비례하므로 만들 수 있는 가장 큰 소떡소떡을 만들려고 한다. 다만 꼬치를 만들기 전에 소시지와 가래떡 일부를 치울 수 없고, 그릴의 특정 세로줄에 있는 모든 음식물을 꽂아야 한다. 음식물을 옮기거나 새로운 음식물을 넣는 것은 허용되지 않는다.

음식물의 정보가 주어졌을 때 만들 수 있는 가장 큰 소떡소떡의 크기를 구하는 프로그램을 작성하여라.

입력

첫 번째 줄에 소시지와 가래떡의 총 개수 NN이 주어진다. (1≤N≤250 000)(1 \leq N \leq 250\,000)

다음 NN개의 줄에 ii번째 음식물의 정보 xl_ixl\_i, xr_ixr\_i, y_iy\_i, t_it\_i가 공백으로 구분되어 주어진다. (1≤xl_i≤xr_i≤109;(1 \leq xl\_i \leq xr\_i \leq 10^9; 1≤y_i≤109;1 \leq y\_i \leq 10^9; t_i∈{S,D})t\_i \in \{S, D\})

t_i=St\_i = S이면 소시지, t_i=Dt\_i = D이면 가래떡이라는 뜻이다. ii번째 음식물은 y_iy\_i번 가로줄에 놓여 있고 xl_ixl\_i번부터 xr_ixr\_i번까지의 세로줄에 걸쳐 있다.

출력

첫 번째 줄에 만들 수 있는 소떡소떡의 최대 크기(꽂힌 음식물의 길이 합의 최댓값)를 출력한다. 소떡소떡을 만들 수 없으면 00을 출력한다.

예제3

  1. 예제 1

    입력
    4
    1 5 1 S
    1 3 2 D
    1 5 3 S
    4 13 4 D
    
    예상 출력
    13
    
  2. 예제 2

    입력
    5
    7 13 10 D
    9 21 8 S
    5 12 14 D
    1 9 3 D
    8 16 11 S
    
    예상 출력
    46
    
  3. 예제 3

    입력
    7
    2 3 1 S
    1 2 2 D
    3 4 2 S
    2 3 3 D
    1 2 4 D
    3 4 4 S
    2 3 5 S
    
    예상 출력
    0