동기 부여 수준과 가입 시각으로 정렬한 명단에서 상위 20%(내림)에 드는 회원을 일꾼으로 유지하고, 가입과 탈퇴가 일어날 때마다 근무 태도가 바뀌는 회원을 기록한다.
보통7트리정렬구현이분 탐색면접 대비아직 제출이 없습니다시간 제한2초메모리 제한512 MBACM은 프로그래밍 대회를 여는 단체다. ACM이 무엇을 위한 단체인지는 중요하지 않다. 중요한 것은 회원의 일하는 방식이 둘로 갈린다는 점이다. 회원은 열심히 일하는 사람이거나 전혀 일하지 않는 사람 중 하나다.
ACM의 각 회원에게는 의욕 수치가 있다. 회원은 의욕 수치로 순위가 매겨진다. 의욕 수치가 높은 회원이 더 높은 순위를 받고, 의욕 수치가 같으면 ACM에 더 늦게 가입한 회원이 더 높은 순위를 받는다. 순위가 상위 20%에 드는 회원은 열심히 일하고, 나머지 80%는 절대(!) 일하지 않는다. 회원 수의 20%가 정수가 아니면 소수 부분은 버린다.
ACM의 관리자인 당신은 ACM을 관리하려고 각 회원이 열심히 일하는 사람인지 일하지 않는 사람인지 알아내려 했다. 마침내 현재 회원 전원의 의욕 수치를 평가하는 일을 마쳤다. 하지만 회원이 날마다 가입하고 탈퇴해서 ACM의 회원 구성은 계속 바뀌므로 일은 아직 끝나지 않았다. 그래서 회원이 열심히 일하는 사람에서 일하지 않는 사람으로, 또는 그 반대로 바뀌는 순간을 기록하려 한다.
현재 ACM 회원의 목록과 각 회원의 의욕 수치가 가입한 날짜 순서로 주어진다. 회원의 가입과 탈퇴 목록도 시간 순서로 주어진다.
ACM 회원의 일하는 방식이 바뀌는 순간을 모두 계산하는 프로그램을 작성하라.
첫째 줄에 ACM의 초기 회원 수 N (1 ≤ N ≤ 50,000)이 주어진다. 다음 N개 줄 중 i번째 줄에는 문자열 si와 정수 ai (0 ≤ ai ≤ 105)가 공백 하나로 구분되어 주어진다. si는 i번째 초기 회원의 이름이고 ai는 그 회원의 의욕 수치다. si의 각 문자는 영문자이고 1 ≤ ∣si∣ ≤ 20이다. 이 N개 줄은 각 회원이 ACM에 가입한 날짜 순서로 정렬되어 있다.
(N + 2)번째 줄에 ACM 회원 변동의 수 M (1 ≤ M ≤ 20,000)이 주어진다. 다음 M개 줄 중 j번째 줄에는 j번째 가입 또는 탈퇴 정보가 주어진다. j번째 정보가 회원의 가입이면 "+ tj bj" 형식이고, tj는 가입하는 회원의 이름, bj (0 ≤ bj ≤ 105)는 그 회원의 의욕 수치다. j번째 정보가 회원의 탈퇴이면 "- tj" 형식이고, tj는 탈퇴하는 회원의 이름이다. tj의 각 문자는 영문자이고 1 ≤ ∣tj∣ ≤ 20이다. 대문자와 소문자는 서로 다른 문자로 구별한다. 이 M개 줄은 각 사건이 일어난 날짜 순서로 정렬되어 있다.
두 가입 또는 탈퇴 사건이 동시에 일어나는 일은 없다. 같은 시점에 이름이 같은 두 회원이 있는 일은 없지만, ACM을 한 번 탈퇴한 회원이 다시 가입할 수는 있다.
변화의 기록을 시간 순서로 출력한다. 다음 두 종류의 변화가 일어날 때마다 그 변화에 해당하는 메시지를 한 줄씩 출력한다.
가입 또는 탈퇴 한 건마다 변화는 다음 순서로 일어난다.
첫 번째 예제: 4 × 20% < 1이므로 처음에는 아무도 일하지 않는다. 회원 한 명이 ACM에 가입하면 Durett가 열심히 일하기 시작한다.
두 번째 예제: 아무도 일하지 않는다.
네 번째 예제: 어떤 회원은 가입과 탈퇴를 반복할 수 있다.