새 게임의 적 AI

hp와 dp를 가진 N개 캐릭터와 기준값 C가 주어질 때 순서에 따라 결과가 달라지는 표적 선택 함수가 반환할 수 있는 캐릭터 수를 셉니다.

보통7정렬그래프그리디아직 제출이 없습니다시간 제한2초메모리 제한256 MB

문제

아오바는 게임 회사에 갓 들어온 프로그래머다. 새 게임에서 적 AI(인공지능)가 쓸 전투 전략을 만드는 일을 맡았다. 이 게임에서는 캐릭터마다 체력 hp와 방어력 dp가 있고, hp와 dp가 동시에 같은 캐릭터는 없다. 플레이어는 캐릭터를 한 명 이상 골라 파티를 만들고 적과 싸운다.

아오바는 AI가 파티에서 가장 약한 캐릭터를 공격하도록 전략을 짰다. 즉 hp가 가장 작은 캐릭터를 공격하고, 그런 캐릭터가 여럿이면 그중 dp가 가장 작은 캐릭터를 공격한다. 파티를 나타내는 배열을 받아 AI가 공격할 캐릭터를 돌려주는 함수 selectTarget(v)를 그렇게 작성했다.

그런데 프로젝트 매니저 야가미는 이 AI가 재미없다며 마음에 들어 하지 않았다. 아오바는 한참 헤맨 끝에 프로그램에 있던 상수 0 하나를 상수 C로 바꾸면 재미있어진다는 사실을 알아냈다. 고쳐 쓴 프로그램은 다음과 같다. Character는 캐릭터를 나타내는 자료형이고, 필드 hp와 dp는 각각 체력과 방어력이다.

int C = <constant integer>;

Character selectTarget(Character v[]) {
    int n = length(v);
    int r = 0;
    for (int i = 1; i < n; i++) {
        if (abs(v[r].hp - v[i].hp) > C) {
            if (v[r].hp > v[i].hp) r = i;
        } else {
            if (v[r].dp > v[i].dp) r = i;
        }
    }
    return v[r];
}

이 함수는 v에 담긴 캐릭터 집합이 같아도 배열에 놓인 순서에 따라 다른 캐릭터를 돌려주기도 한다. 야가미는 새 AI의 공격 대상이 될 수 있는 캐릭터가 몇 명인지 알고 싶어 한다. 파티 v와 상수 C가 주어질 때, v의 순서를 마음대로 바꿨을 때 selectTarget(v)의 반환값이 될 수 있는 캐릭터의 수를 세는 프로그램을 작성하라.

입력

입력은 테스트 케이스 하나로 이루어진다. 첫 줄에 정수 N과 C가 주어진다 (1N500001 \le N \le 50000, 0C1090 \le C \le 10^9). N은 v의 크기이고, C는 프로그램 속 상수 C다. 이어지는 N개 줄 중 i번째 줄에는 정수 hpihp_idpidp_i가 주어진다 (0hpi,dpi1090 \le hp_i, dp_i \le 10^9). hpihp_i는 v의 i번째 캐릭터의 체력이고, dpidp_i는 방어력이다. iji \ne j이면 hpihpjhp_i \ne hp_j이거나 dpidpjdp_i \ne dp_j이다.

출력

v의 순서를 임의로 바꿨을 때 selectTarget(v)의 반환값이 될 수 있는 캐릭터의 수를 한 줄에 출력한다.