만드는 중입니다

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

일본식 제비뽑기

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

요약
가로줄을 하나씩 추가하거나 제거할 때마다, 모든 출발 세로선이 같은 번호의 상품에 도달하도록 제거해야 하는 가로줄의 최소 개수를 구합니다.
난이도

어려움10점 중 9점

유형
동적 계획법, 세그먼트 트리, 비트 연산
정답자
아직 제출이 없습니다

문제

아미다쿠지는 일본에서 인기 있는 제비뽑기로, ww명에게 ww개의 상품을 나눠 주는 데 쓸 수 있다. 게임은 ww개의 세로선(다리)과 인접한 다리를 잇는 여러 개의 가로줄로 이루어진다. 다리의 윗부분이 ww명의 출발 위치이고, 상품은 다리의 아랫부분에 놓여 있다. ii번째 사람의 상품을 알아내려면 맨 위의 ii번째 다리에서 출발해 아래로 내려가고, 가로줄을 만날 때마다 다리를 옮겨 탄다. 그림 J.1에 게임의 모습과 경로를 따라가는 방법이 나와 있다.

그림 J.1: 아미다쿠지 게임의 모습. 1번 사람은 3번 상품과 연결되어 있다. 모든 연결을 추가하고 하나도 제거하지 않은 상태이다. ii번 사람을 ii번 상품과 연결하려면 2번과 3번 다리 사이의 가로줄 두 개와 3번과 4번 다리 사이의 가장 위쪽 가로줄을 제거해야 한다. 이것이 유일한 최소 해이다.

처음에는 가로줄이 없다. 이후 가로줄을 하나씩 추가하거나 다시 제거한다. 각 변경 후에, 모든 ii에 대해 ii번 사람이 ii번 상품을 받도록 하려면 최소 몇 개의 가로줄을 제거해야 하는지 구하라. 가로줄을 모두 제거하면 항상 가능하므로 답은 언제나 존재한다.

입력

첫 줄에 세 정수 ww, hh, qq (2≤w≤202 \leq w \leq 20, 1≤h,q≤2⋅1051 \leq h, q \leq 2\cdot10^5)가 주어진다. 각각 다리의 개수, 다리의 높이, 변경 횟수이다.

이어지는 qq개의 줄에는 세 정수 yy, x1x_1, x2x_2 (1≤y≤h1 \leq y \leq h, 1≤x1,x2≤w1 \leq x_1, x_2 \leq w)가 주어진다. 높이 yy에서 다리 x1x_1과 x2x_2 사이의 가로줄을 추가하거나 제거하는 변경이다. 그 위치에 가로줄이 이미 있으면 제거하고, 없으면 추가한다. 두 다리는 인접함이 보장되며, ∣x1−x2∣=1|x_1 - x_2| = 1이다.

어느 순간에도 모든 가로줄의 높이는 서로 다르다.

출력

각 변경 후, 현재 존재하는 가로줄만으로 이루어진 게임에서 모든 ii에 대해 ii번 사람이 ii번 상품을 받도록 제거해야 하는 가로줄의 최소 개수를 한 줄에 하나씩 출력한다.

예제2

  1. 예제 1

    입력
    4 6 7
    1 1 2
    2 3 4
    4 3 4
    5 1 2
    6 3 4
    3 2 3
    6 3 4
    
    예상 출력
    1
    2
    1
    0
    1
    2
    1
    
  2. 예제 2

    입력
    5 9 12
    1 3 4
    2 1 2
    3 2 3
    4 4 5
    5 2 1
    6 4 3
    7 2 3
    8 4 3
    9 4 5
    6 4 3
    7 2 3
    1 3 4
    
    예상 출력
    1
    2
    3
    4
    3
    2
    3
    4
    3
    4
    3
    2