연산 추가하기

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

요약
H개 사이클 위에 N개의 점유 구간이 주어질 때, 각 길이 T마다 비어 있는 T칸 블록을 놓을 수 있는 시작 위치의 수를 구한다.
난이도

보통10점 중 6점

유형
정렬, 투 포인터, 구간, 누적 합
정답자
아직 제출이 없습니다

문제

FuriosaAI는 데이터센터 및 고성능 엣지를 위한 AI 반도체를 개발한다. 2세대 제품 RNGD는 자체 설계한 아키텍처인 TCP(Tensor Contraction Processor) 기반의 인공지능 가속기로, PyTorch 등 주요 프레임워크와 호환되는 SDK를 제공한다.

RNGD에서 인공지능 모델의 추론을 수행하려면, 먼저 모델에서 수행하는 계산을 RNGD 명령어들의 나열로 변환하는, 즉 컴파일하는 과정이 필요하다. 실제 컴파일 과정을 단순화한 다음과 같은 상황을 가정해보자.

RNGD 연산 시간의 기본 단위는 사이클로, 모델의 실행은 총 HH 사이클 이내에 끝나야 한다는 제한이 있다. HH개의 사이클을 순서대로 사이클 11, 사이클 22, ⋯\cdots, 사이클 HH라고 부르자.

컴파일된 인공지능 모델에는 총 NN개의 연산이 있으며, 이 중 ii번째 연산은 사이클 A_iA\_i부터 사이클 B_iB\_i까지 실행된다. 실행되는 사이클이 서로 겹치는 연산들이 있을 수도 있다.

RNGD에서 컴파일된 모델을 실행하는 도중에 추가 연산 하나를 함께 수행해야 한다는 요청이 들어왔다. 이때 추가 연산은 기존 NN개의 연산 중 어느 것과도 실행 사이클이 겹치면 안 되며, HH 사이클 이내에서 수행이 완료되어야 한다. 구체적으로,

  • 추가 연산을 수행하는 데 TT 사이클이 걸린다고 하자. 즉, 추가 연산이 사이클 SS에 시작된다면, 사이클 S+T−1S+T-1에 종료된다.
  • 추가 연산이 수행되는 TT개의 사이클 동안, 다른 연산이 동시에 수행되어서는 안 된다.
  • 1≤S≤S+T−1≤H1\leq S\leq S+T-1\leq H여야 한다.

추가 연산의 종류에 따라 소요되는 사이클 수 TT가 달라질 수 있으므로, QQ가지 시나리오를 미리 검토하려 한다. ii번째 시나리오에서 추가 연산을 수행하는 데 T_iT\_i 사이클이 필요한 경우, 조건을 만족하는 시작 사이클 SS가 총 몇 개인지 빠르게 계산해보자.

각 시나리오의 추가 연산은 누적되지 않음에 유의하라.

입력

첫째 줄에 인공지능 모델을 구성하는 연산의 수 NN, 전체 사이클 수 HH가 공백으로 구분되어 주어진다. (0≤N≤200,0000 \leq N \leq 200\\,000; 1≤H≤1091 \leq H \leq {10}^9)

이후 NN개의 줄에 걸쳐, 그 중 ii번째 줄에 ii번째 연산이 실행되는 시작 사이클과 종료 사이클을 가리키는 두 정수 A_i,B_iA\_i, B\_i가 공백으로 구분되어 주어진다. (1≤A_i≤B_i≤H1 \leq A\_i \leq B\_i \leq H)

그 다음 줄에 시나리오의 개수 QQ가 주어진다. (1≤Q≤200,0001 \leq Q \leq 200\\,000)

이후 QQ개의 줄에 걸쳐, 추가 연산의 소요 사이클 수 T_iT\_i가 주어진다. (1≤T_i≤H1 \leq T\_i \leq H)

출력

QQ개의 줄에 각 시나리오에 대한 정답을 순서대로 출력한다.

예제2

  1. 예제 1

    입력
    3 30
    5 8
    12 19
    14 23
    3
    2
    4
    6
    
    예상 출력
    11
    5
    2
    
  2. 예제 2

    입력
    0 4
    2
    1
    2
    
    예상 출력
    4
    3