만드는 중입니다

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

공들의 리듬게임

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

요약
직선 위에 놓인 N개의 공이 정지하거나 좌우로 움직일 때, 더 이상 충돌이 일어나지 않을 때까지 얻는 총 점수를 구합니다.
난이도

보통10점 중 6점

유형
그리디, 정렬, 스택
정답자
아직 제출이 없습니다

문제

무한히 긴 직선 위에 공 NN개가 놓여 있다. 각 공은 정지해 있거나, 왼쪽으로 움직이거나, 오른쪽으로 움직인다. 처음에 모든 공의 위치는 서로 다르다.

리듬게임 장인인 현제는 움직이던 공들이 서로 부딪히는 모습에서 일정한 리듬을 느껴 게임을 만들었다. 게임은 0점에서 시작한다. 공들이 충돌할 때마다 다음과 같이 점수를 얻고 공의 상태가 바뀐다.

  • 왼쪽으로 움직이던 공과 오른쪽으로 움직이던 공이 충돌하면, 두 공 모두 진행 방향이 반대로 바뀐다. 이 경우 1점을 얻는다.

  • 움직이던 공이 정지해 있던 공과 충돌하면, 움직이던 공은 그 자리에 멈추고, 정지해 있던 공은 움직이던 공의 방향으로 움직인다. 이 경우 2점을 얻는다.

  • 왼쪽으로 움직이던 공, 정지해 있던 공, 오른쪽으로 움직이던 공이 동시에 충돌하면, 왼쪽과 오른쪽으로 움직이던 공은 모두 진행 방향이 반대로 바뀌고, 정지해 있던 공은 그대로 정지해 있는다. 이 경우 5점을 얻는다.

한 번의 충돌이 여러 조건을 만족하면, 점수가 가장 높은 조건만 적용된다.

공이 더 이상 충돌하지 않을 만큼 시간이 지났을 때의 총점을 구한다. 총점은 얻은 점수의 합이다.

움직이는 공은 모두 속력 1을 유지하며, 충돌 후 새로 움직이기 시작하는 공의 속력도 1이다. 공은 길이와 부피가 무시할 만큼 작다고 가정한다. 충돌을 제외하면 공의 운동 방향과 속력은 그대로 유지된다.

입력

첫 번째 줄에 공의 개수 NN이 주어진다. (1≤N≤500 000)(1\le N\le 500\,000)

다음 NN개 줄에 각 공의 위치와 초기 상태를 나타내는 정수 aia_i와 did_i가 공백으로 구분되어 주어진다. (∣ai∣≤1018(|a_i|\le 10^{18}, ∣di∣≤1)|d_i|\le 1)

aia_i는 직선 위 공의 좌표이다. did_i에 따라 초기 상태는 다음과 같다.

  • di=0d_i=0: 정지해 있다.
  • di=−1d_i=-1: 왼쪽으로 움직인다.
  • di=1d_i=1: 오른쪽으로 움직인다.

모든 공의 위치는 서로 다르다.

출력

공이 더 이상 충돌하지 않을 만큼 시간이 지났을 때의 총점을 출력한다.

예제4

  1. 예제 1

    입력
    2
    -4 -1
    5 1
    
    예상 출력
    0
    
  2. 예제 2

    입력
    2
    -4 1
    5 -1
    
    예상 출력
    1
    
  3. 예제 3

    입력
    3
    -1 1
    0 0
    1 -1
    
    예상 출력
    5
    
  4. 예제 4

    입력
    4
    4 1
    5 0
    6 0
    8 -1
    
    예상 출력
    9