풍선 나눠 주기

모든 비율 P_i/j를 큰 값부터 순위를 매기고, 각 참가자마다 순위 N 이내에 드는 비율의 개수를 센다. 마지막 순위에 동점이 있으면 그 비율도 모두 포함한다.

어려움8이분 탐색정렬수학그리디아직 제출이 없습니다시간 제한6초메모리 제한512 MB

문제

어떤 대회에 참가자가 MM명 있다. ii번 참가자의 점수는 PiP_i점이다.

주최 측은 풍선 NN개를 다음 규칙으로 나눠 준다.

  1. 참가자 ii와 자연수 j=1,2,3,j = 1, 2, 3, \dots의 모든 짝에 대해 비율 Pi/jP_i / j를 계산한다.
  2. 계산한 비율을 전부 한 목록에 모아 값이 큰 것부터 작은 것 순으로 순위를 매긴다. 값이 같은 비율은 순위도 같다. 정확히 말하면 어떤 비율의 순위는 그보다 값이 큰 비율의 개수에 1을 더한 값이다.
  3. 참가자는 자기 비율 중 순위가 NN 이하인 것 하나마다 풍선을 하나씩 받는다. 풍선을 받는 마지막 순위에 여러 비율이 같은 값으로 묶이면 묶인 비율이 모두 풍선을 받으므로, 나눠 준 풍선이 NN개보다 많아질 수 있다.

각 참가자가 받는 풍선의 개수를 구하여라.

예를 들어 참가자가 M=5M = 5명이고 점수가 P1=274771P_1 = 274771, P2=344854P_2 = 344854, P3=773780P_3 = 773780, P4=627629P_4 = 627629, P5=386890P_5 = 386890이며 풍선이 N=10N = 10개라고 하자. 비율을 소수점 아래 둘째 자리까지 반올림해 적으면 앞부분은 다음과 같다.

j = 1j = 2j = 3j = 4j = 5...
#1274771.00137385.5091590.3368692.7554954.20...
#2344854.00172427.00114951.3386213.5068970.80...
#3773780.00386890.00257926.67193445.00154756.00...
#4627629.00313814.50209209.67156907.25125525.80...
#5386890.00193445.00128963.3396722.5077378.00...

각 비율의 순위는 다음과 같다. 굵게 쓴 순위는 N=10N = 10 이하여서 그 비율이 풍선을 받는다. 이 예에서 j6j \ge 6인 비율은 순위가 모두 10보다 크다.

j = 1j = 2j = 3j = 4j = 5...
#1715243443...
#2512192633...
#31381014...
#42691318...
#5310162229...

그래서 다섯 참가자가 받는 풍선은 차례대로 1개, 1개, 4개, 3개, 2개이다. 모두 합치면 11개인데, 773780/4773780 / 4386890/2386890 / 2가 둘 다 193445193445로 같아 순위 10에 함께 묶이기 때문이다.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다.

각 테스트 케이스는 두 줄로 이루어진다. 첫째 줄에 정수 MMNN이 공백으로 구분되어 주어진다. 둘째 줄에 MM개의 정수 P1,P2,,PMP_1, P_2, \dots, P_M이 공백으로 구분되어 주어진다.

제한:

  • 1T30001 \le T \le 3000
  • 1M1051 \le M \le 10^5
  • 모든 테스트 케이스의 MM을 더한 값은 4×1054 \times 10^5 이하이다
  • 1N1091 \le N \le 10^9
  • 1Pi1091 \le P_i \le 10^9

출력

각 테스트 케이스마다 한 줄에 MM개의 정수를 공백 하나로 구분해 출력한다. ii번째 정수는 ii번 참가자가 받는 풍선의 개수이다.