아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

스케줄러

면접 대비

시간 제한2초메모리 제한256 MB

요약
각 초마다 p_i + t_i가 가장 큰 프로세스를 고르고 동률이면 번호가 작은 쪽을 실행하는 스케줄러를 T초 동안 모델링해 프로세스별 실행 시간을 구한다.
난이도

보통10점 중 7점

유형
시뮬레이션, 힙, 그리디, 구현
정답자
아직 제출이 없습니다

문제

멀티태스킹 운영체제 <>에는 NN개의 프로세스가 실행되고 있다. 각 프로세스에는 우선순위 pip_i가 주어지며, 이 값은 프로세스가 얼마나 자주 실행되는지에 영향을 준다. 시스템에는 작업을 실행할 코어가 하나뿐이므로, 각 프로세스의 우선순위를 고려해 CPU 시간을 분배해야 한다.

매 순간 어떤 프로세스를 실행할지 정하는 알고리즘은 다음과 같다. 각 프로세스에는 우선순위 pip_i 외에도 카운터 tit_i가 있다. 처음에는 모든 tit_i가 0이다. 그런 다음 매초마다:

  1. pi+tip_i + t_i의 값이 최대인 프로세스들을 고른다.
  2. 그런 프로세스가 여러 개라면 번호 ii가 가장 작은 프로세스를 고른다.
  3. 고른 프로세스 ii를 1초 동안 실행한다.
  4. 고른 프로세스 ii의 tit_i를 0으로 만든다.
  5. 나머지 모든 프로세스의 tit_i를 1씩 증가시킨다.

운영체제의 동작을 TT초 동안 모델링하여 각 프로세스가 몇 초 동안 실행되었는지 계산하라. 모든 계산과 프로세스 전환은 즉시 이루어지므로, 각 프로세스의 실행 시간은 정수 초이다.

입력

첫째 줄에 운영체제의 프로세스 수 NN과 모델링할 시간 TT가 공백으로 구분되어 주어진다 (1≤N≤1051 \le N \le 10^5, 1≤T≤1061 \le T \le 10^6).

둘째 줄에 NN개의 정수 pip_i가 공백으로 구분되어 주어진다. pip_i는 프로세스의 우선순위이다 (0≤pi≤1050 \le p_i \le 10^5).

출력

첫째 줄에 각 프로세스가 실행된 시간을 나타내는 NN개의 정수를 공백으로 구분하여 출력한다.

예제1

  1. 예제 1

    입력
    3 10
    3 4 5
    
    예상 출력
    3 3 4