728x90
https://www.acmicpc.net/problem/2900
728x90
메모리: 323,728 KB , 시간: 1,760 ms
사용 알고리즘: 수학, 정수론, 누적 합
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;
public class Main {
static int N;
static int[] arr;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
HashMap<Integer, Integer> hm = new HashMap<>();
st = new StringTokenizer(br.readLine());
int x;
for (int i = 0; i < K; i++) {
x = Integer.parseInt(st.nextToken());
hm.put(x, hm.getOrDefault(x, 0) + 1);
}
arr = new int[N];
for (int key : hm.keySet()) {
something(key, hm.get(key));
}
long[] sum = new long[N + 1];
for (int i = 1; i <= N; i++) {
sum[i] = sum[i - 1] + arr[i - 1];
}
StringBuilder result = new StringBuilder();
int Q = Integer.parseInt(br.readLine());
int L, R;
for (int i = 0; i < Q; i++) {
st = new StringTokenizer(br.readLine());
L = Integer.parseInt(st.nextToken());
R = Integer.parseInt(st.nextToken());
result.append((sum[R + 1] - sum[L]) + "\n");
}
System.out.print(result);
}
static void something(int jump, int count) {
int i = 0;
while(i < N) {
arr[i] += count;
i += jump;
}
}
}
728x90
'Problem Solving > BOJ' 카테고리의 다른 글
[백준, BOJ 18223] 민준이와 마산 그리고 건우 (java) (0) | 2024.04.08 |
---|---|
[백준, BOJ 9084] 동전 (java) (0) | 2024.04.07 |
[백준, BOJ 1944] 복제 로봇 (java) (1) | 2024.04.07 |
[백준, BOJ 17951] 흩날리는 시험지 속에서 내 평점이 느껴진거야 (java) (1) | 2024.04.06 |
[백준, BOJ 12896] 스크루지 민호 (java) (0) | 2024.04.01 |