https://www.acmicpc.net/problem/28018



import java.io.*;
import java.util.*;
public class LibrarySeatUsage {
public static void main(String[] args) throws IOException {
// 빠른 입출력을 위해 BufferedReader와 BufferedWriter 사용
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
// 학생 수 N
int N = Integer.parseInt(br.readLine());
// 최대 시각을 1,000,001로 설정 (E + 1까지 포함)
int MAX_TIME = 1000001;
int[] counts = new int[MAX_TIME + 2]; // 인덱스 0부터 사용
// N개의 좌석 사용 구간 입력
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
int S = Integer.parseInt(st.nextToken());
int E = Integer.parseInt(st.nextToken());
counts[S] += 1; // 시작 시각에 1 추가
counts[E + 1] -= 1; // 종료 시각 다음에 1 감소
}
// 차분 배열을 누적 합으로 변환
for (int t = 1; t <= MAX_TIME; t++) {
counts[t] += counts[t - 1];
}
// 질의 수 Q
int Q = Integer.parseInt(br.readLine());
// Q개의 질의 시각 입력
st = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
for (int i = 0; i < Q; i++) {
int queryTime = Integer.parseInt(st.nextToken());
// 시각이 범위를 벗어나지 않도록 확인
if (queryTime >= 0 && queryTime <= MAX_TIME) {
sb.append(counts[queryTime]).append("\n");
} else {
sb.append("0\n"); // 시각이 범위를 벗어나면 0
}
}
// 결과 출력
bw.write(sb.toString());
// 버퍼 비우기 및 닫기
bw.flush();
bw.close();
br.close();
}
}



