만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

랜덤 넘버 추측하기

면접 대비

시간 제한1초메모리 제한1024 MB

요약
멤버들의 가중치와 당첨자 순서가 주어질 때, 각 추첨에서 해당 멤버가 당첨되는 티켓 번호를 하나씩 출력합니다.
난이도

보통10점 중 4점

유형
누적 합, 배열
정답자
아직 제출이 없습니다

문제

영과일에서 한 학기 동안 문제를 열심히 푼 회원들을 추첨해 상품을 지급하려고 한다.

각 회원에게는 푼 문제 수만큼 추첨 확률을 높이는 가중치가 부여된다. 회원이 문제를 pp개 풀었다면 그 회원의 가중치는 pp이다.

한 학기 동안 문제를 푼 회원은 총 NN명이며, 이들에게 1번부터 NN번까지 고유 번호를 부여한다.

NN명 가운데 M(1≤M≤N)M(1 \leq M \leq N)명을 뽑으며, 추첨은 i=1i=1부터 시작해 다음 순서로 진행한다.

  1. 1번 회원부터 NN번 회원까지 번호 순서대로, 각 회원의 가중치만큼 응모권을 리스트 WW에 넣는다. 예를 들어 회원이 3명이고 가중치가 2, 1, 32,\ 1,\ 3이라면 W=[T1,T1,T2,T3,T3,T3]W = [T_1, T_1, T_2, T_3, T_3, T_3]이다. (TkT_k는 kk번 회원의 응모권)
  2. 11부터 ∣W∣|W|까지의 정수 중 하나를 무작위로 골라 XiX_i라 한다.
  3. 리스트 WW의 앞에서부터 XiX_i번째 응모권을 골라 당첨자 한 명을 뽑는다.
  4. 리스트 WW에서 방금 당첨된 회원의 응모권을 모두 지운다.
  5. i≠Mi \neq M이면 ii를 1 늘리고 2번으로 돌아간다. 그렇지 않으면 추첨을 끝낸다.

위 방식으로 뽑힌 당첨자의 고유 번호가 순서대로 주어졌을 때, 추첨에서 나온 무작위 수가 차례대로 무엇이었는지 추측한다.

입력

첫 번째 줄에 회원 수 NN과 당첨 인원 수 MM이 공백으로 구분되어 주어진다. (1≤N≤500 000;1≤M≤N)(1 \leq N \leq 500\,000; 1 \leq M \leq N)

두 번째 줄에 각 회원의 가중치 pp가 공백으로 구분되어 NN개 주어진다. (1≤p≤1 000)(1 \leq p \leq 1\,000)

세 번째 줄에 뽑힌 순서대로 당첨자의 고유 번호 kk가 공백으로 구분되어 MM개 주어진다. (1≤k≤N)(1 \leq k \leq N)

입력의 모든 수는 정수이다.

출력

추첨 과정에서 나온 무작위 수열 XX를 공백으로 구분하여 출력한다.

가능한 수열이 여러 개라면 그중 아무 수열이나 하나 출력한다.

예제1

  1. 예제 1

    입력
    5 3
    1 2 3 4 5
    3 5 1
    
    예상 출력
    5 9 1