차이가 K 이하인 쌍 세기

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

요약
수열과 K가 주어질 때, 각 질의는 부분 배열 안에서 값 차이가 K 이하인 인덱스 쌍의 개수를 묻는다.
난이도

어려움10점 중 8점

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

문제

길이가 NN인 수열 A1,A2,…,ANA_1, A_2, \dots, A_N과 정수 KK가 주어진다. 다음 형태의 쿼리 MM개를 처리하는 프로그램을 작성하시오.

  • l r: l≤i<j≤rl \le i < j \le r이면서 ∣Ai−Aj∣≤K|A_i - A_j| \le K인 쌍 (i,j)(i, j)의 개수를 출력한다.

입력

첫째 줄에 수열의 길이 NN과 정수 KK가 주어진다. (1≤N≤1000001 \le N \le 100000, 1≤K≤1000001 \le K \le 100000)

둘째 줄에 A1,A2,…,ANA_1, A_2, \dots, A_N이 공백으로 구분되어 주어진다. (1≤Ai≤1000001 \le A_i \le 100000)

셋째 줄에 쿼리의 개수 MM이 주어진다. (1≤M≤1000001 \le M \le 100000)

넷째 줄부터 MM개의 줄에 쿼리가 한 줄에 하나씩 주어진다. 각 줄에는 두 정수 ll과 rr이 주어진다. (1≤l≤r≤N1 \le l \le r \le N)

출력

각 쿼리의 답을 입력에 주어진 순서대로 한 줄에 하나씩 출력한다.

예제2

  1. 예제 1

    입력
    4 31
    1 16 32 64
    4
    1 4
    1 2
    2 4
    2 3
    
    예상 출력
    3
    1
    1
    1
    
  2. 예제 2

    입력
    1 1
    1
    1
    1 1
    
    예상 출력
    0