아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

스핀 닥터

시간 제한5초메모리 제한512 MB

요약
각 사람의 (a_i, b_i)와 지지 여부 c_i가 주어질 때, 방향 (S, T)를 정해 투표자 1인 점들을 정렬했을 때 이들을 모두 포함하는 구간 길이의 최솟값을 구한다. 동점은 최악의 순서로 배치된다.
난이도

어려움10점 중 9점

유형
기하, 정렬, 분할 정복, 이분 탐색
정답자
아직 제출이 없습니다

문제

당신은 여론조사 회사에서 일한다. 복잡한 현실 문제를 몇 개의 숫자로 줄여 보여 주는 것이 이 일이고, 언제나 쉽지는 않다. 큰 선거를 앞두고 후보 X의 의뢰를 받아 nn명을 조사했고, ii번째 사람에게서 세 가지 값을 기록했다.

  • aia_i: 그 사람이 외우고 있는 원주율 π\pi의 자릿수
  • bib_i: 그 사람의 머리카락 개수
  • cic_i: 그 사람이 후보 X에게 투표하면 11, 아니면 00

이제 와서 보니 이 질문이 정말 물어야 할 질문이었는지 의심스럽다. 자료에는 aa, bb, cc 사이의 상관관계가 전혀 없다. 그렇다고 의뢰인의 말을 정면으로 반박하면 일자리를 잃기 딱 좋으니, 결과가 의미 있어 보이도록 가중치를 찾기로 한다.

실수 SS와 TT를 하나씩 고르고, nn개의 기록을 aiS+biTa_i S + b_i T 값으로 정렬한다. 후보 X에게 투표할 사람이 서로 가까이 모일수록 결과가 그럴듯해 보인다. 정렬된 목록에서 ci=1c_i = 1인 기록 중 첫 번째의 위치를 jj, 마지막의 위치를 kk라고 하면 군집 크기는 k−j+1k - j + 1이고, 이 값을 최대한 작게 만들고 싶다.

SS와 TT를 어떻게 고르느냐에 따라 여러 기록의 값이 같아지기도 한다. 값이 같은 기록은 서로 어떤 순서로도 놓일 수 있으므로 최악의 경우를 가정한다. 즉 그 (S,T)(S, T)에서는 군집 크기가 가장 커지는 순서가 나온다고 본다.

가능한 모든 실수 쌍 (S,T)(S, T) 가운데 군집 크기가 가장 작은 값을 구하라.

입력

첫째 줄에 조사한 사람 수 nn (1≤n≤2500001 \le n \le 250000)이 주어진다. 다음 nn개의 줄에는 각각 정수 aia_i (0≤ai≤20000000 \le a_i \le 2000000), bib_i (0≤bi≤20000000 \le b_i \le 2000000), cic_i가 주어진다. cic_i는 그 사람이 후보 X에게 투표하면 11, 아니면 00이다. 조사한 사람 중 후보 X에게 투표하는 사람은 적어도 한 명 있다.

출력

가능한 모든 실수 쌍 (S,T)(S, T) 가운데 군집 크기의 최솟값을 출력한다.

예제3

  1. 예제 1

    입력
    6
    0 10 0
    10 0 1
    12 8 1
    5 5 0
    11 2 1
    11 3 0
    
    예상 출력
    4
    
  2. 예제 2

    입력
    10
    6 1 1
    0 2 0
    2 1 1
    6 1 1
    8 2 0
    4 4 0
    4 0 0
    2 3 1
    6 1 0
    6 3 1
    
    예상 출력
    8
    
  3. 예제 3

    입력
    5
    5 7 0
    3 4 0
    5 7 0
    5 7 1
    9 4 0
    
    예상 출력
    1