스트릭과 쿼리
시간 제한1초메모리 제한1024 MB
제출, 채점 결과 뒤집기, 날짜 넘기기 쿼리가 주어질 때 최장 스트릭이 k번째로 큰 사용자의 값을 출력합니다.
문제
solved.ac에서 정지당한 현제는 본인만의 새로운 스트릭 시스템을 만들어 MatKor에 적용하고자 한다.
현제의 스트릭 시스템은 유저별로 독립적으로 동작하며 서로 영향을 주지 않는다. 유저의 스트릭은 다음과 같이 결정된다.
- 유저는 문제를 풀면 그 문제의 풀이 코드를 한 번에 하나씩 제출할 수 있고, 채점 시스템은 정답이면 맞았습니다!!를, 오답이면 다른 결과를 보여준다.
- 특정 문제의 “첫 정답 제출”은 시간순으로 볼 때, 그 문제에서 이전에 맞았습니다!!를 받은 적이 없고 처음으로 맞았습니다!!를 받은 제출이다.
- “재채점”은 기존에 제출된 코드를 다시 채점하는 것이다. 재채점으로 특정 문제의 정답 여부가 바뀌면, 그 문제의 “첫 정답 제출”을 제출 시간 기준으로 다시 계산하므로 “첫 정답 제출”이 달라질 수 있다.
- 유저가 연속한 일 동안 모든 날짜에 “첫 정답 제출”이 존재하면, 그 유저는 “-스트릭 그룹”에 포함된다.
- 유저별 최장 스트릭은 그 유저가 포함되는 “-스트릭 그룹” 중 가장 큰 의 값이다.
현제는 MatKor 부원 명에게 1번부터 번까지 번호를 매겼다. 개의 문제로 구성된 스트릭 시스템을 현제는 시간순으로 들어오는 개의 쿼리로 관리하고자 한다.
1 u p c: 번 유저가 번 문제의 풀이 코드를 제출했고, 정답 여부는 이다. 가 1이면 맞았습니다!!, 0이면 오답이다. (, , )2: 날짜가 다음 날로 바뀐다.3 i: 번째 쿼리의 제출이 재채점되어 정답 여부가 반전된다. 기존 정답은 오답으로, 오답은 정답으로 바뀐다. (, 번째 쿼리는 주어진 1번 쿼리이다.)4 k: 현재 시점에서 최장 스트릭이 번째로 긴 유저의 최장 스트릭을 출력한다. () 이 쿼리는 적어도 한 번 이상 주어진다.
입력
첫 줄에 유저의 수 ()과 쿼리의 개수 ()이 주어진다.
다음 개의 줄에 시간순으로 위의 네 가지 쿼리 중 하나가 한 줄에 하나씩 주어진다.
출력
4번 쿼리마다 정답을 한 줄에 하나씩, 쿼리 순서대로 출력한다.