만드는 중입니다

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

K512에 바이러스 퍼뜨리기

면접 대비

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

요약
N대의 컴퓨터에 감염과 치료 쿼리를 처리하고, 조회 쿼리마다 감염되지 않은 컴퓨터 수를 출력합니다.
난이도

쉬움10점 중 2점

유형
배열, 구현
정답자
아직 제출이 없습니다

문제

K512는 내일 열리는 K512컵 준비로 한창 바쁘다. K512에는 총 NN대의 컴퓨터가 있으며, 각각 11번부터 NN번까지 번호가 붙어 있다.

장난을 좋아하는 승형이는 K512의 PC에 바이러스를 퍼뜨려 K512컵을 망칠 계획을 세웠다. 그러나 이를 알아챈 근수는 PC를 치료해 다시 감염되지 않은 상태로 만들려고 한다. 처음에는 모든 컴퓨터가 감염되지 않은 상태이다. 승형이가 감염시키는 컴퓨터와 근수가 치료하는 컴퓨터의 번호가 주어질 때, K512에서 감염되지 않은 PC의 수를 구해 보자.

입력

첫 번째 줄에 컴퓨터의 개수 N(1≤N≤2×105)N(1 \le N \le 2 \times 10^5)과 쿼리의 개수 Q(1≤Q≤2×105)Q(1 \le Q \le 2 \times 10^5)가 주어진다. 이어지는 QQ개의 줄에는 다음 쿼리 중 하나가 한 줄에 하나씩 주어진다.

  • 11 xx: 승형이가 xx번 컴퓨터를 감염시킨다. 이미 감염된 컴퓨터를 다시 감염시킬 수 있으며, 이때는 아무 변화가 없다. (1≤x≤N)(1 \le x \le N)
  • 22 xx: 근수가 xx번 컴퓨터를 치료해 감염되지 않은 상태로 만든다. 감염되지 않은 컴퓨터를 치료할 수 있으며, 이때는 아무 변화가 없다. (1≤x≤N)(1 \le x \le N)
  • 33: K512에서 현재 감염되지 않은 컴퓨터의 개수를 출력한다.

출력

33의 쿼리가 주어질 때마다 그 답을 한 줄에 출력한다. 33의 쿼리는 하나 이상 주어진다.

힌트

입출력이 느리면 여러 줄을 읽거나 출력할 때 시간 초과가 날 수 있으므로, 언어별로 다음 방법을 권장한다.

  • C++: cin/cout을 사용하려면 main 함수의 첫 줄에 아래 두 줄을 넣고, 출력할 때는 endl 대신 개행 문자(\n)를 사용한다. 이렇게 하면 scanf/printf/puts/getchar/putchar 등 C의 입출력 방식은 더 이상 쓸 수 없다.

    • cin.tie(nullptr);
    • sync_with_stdio(false);
  • Python: input 대신 아래 코드를 사용한다.

    • sys.stdin.readline.rstrip()
  • Java, Kotlin: Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용한다. BufferedWriter.flush는 프로그램이 끝나기 전에 한 번만 호출하면 된다.

예제1

  1. 예제 1

    입력
    10 10
    1 3
    1 6
    1 3
    3
    2 3
    2 7
    1 7
    3
    1 9
    3
    
    예상 출력
    8
    8
    7