본문 바로가기

알고리즘 테스트/이진 탐색

숫자 개수 세기

문제


n개의 숫자가 주어지고, q개의 질문이 주어진다. 각각의 질문은 n개의 숫자 중에서 특정 숫자가 몇개나 있는지를 묻는다. q개의 질문에 모두 답하는 프로그램을 작성하시오.

 

입력


첫 번째 줄에 숫자의 개수 n, 그리고 질문의 개수 q가 주어진다 ( 1 ≤ n ≤ 100,000, 1 ≤ q ≤ 100,000) 두 번째 줄에 n개의 숫자가 주어진다. 세 번째 줄에 q개의 질문이 주어진다. 주어지는 q개의 질문에 해당하는 숫자 범위는 100,000,000이하이다.  

출력


각 질문에 대하여 숫자의 개수를 한 줄에 하나씩 출력한다.  

예제 입력

10 4

1 3 4 3 2 3 1 2 5 10

1 3 9 10

예제 출력

2 3 0 1

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
def lower_bound(n, i):
  s = 0
  e = len(n) - 1
  while s < e:
    m = (s + e) // 2
    if n[m] < i:
      s = m + 1 
    else:
      e = m 
  return s
 
def upper_bound(n, i):
  s = 0
  e = len(n) - 1
  while s < e:
    m = (s + e) // 2
    if n[m] <= i:
      s = m + 1
    else:
      e = m
  return s
  
  
a, b = list(map(int, input().split()))
 
= list(map(int, input().split()))
n.sort()
n.append(100000001)
= list(map(int, input().split()))
for i in k:
  idx2 = upper_bound(n, i)
  idx1 = lower_bound(n, i)
  print(idx2 - idx1)
cs

'알고리즘 테스트 > 이진 탐색' 카테고리의 다른 글

NN단표  (0) 2021.07.25