# 스위치 켜고 끄기 import sys input = sys.stdin.readline def work_mode1(s, s_state, s_num): mul = 1 idx = s_num * mul while idx <= s: s_state[idx] = 1 - s_state[idx] mul += 1 idx = s_num * mul return def work_mode2(s, s_state, s_num): gap = 1 s_state[s_num] = 1 - s_state[s_num] while s_num + gap <= s and s_num - gap >= 1: if s_state[s_num + gap] != s_state[s_num - gap]: break s_state[s_num + gap] = 1 - s_state[s_num + gap] s_state[s_num - gap] = 1 - s_state[s_num - gap] gap += 1 return WORK = { 1: work_mode1, 2: work_mode2 } def solution(): s = int(input().rstrip()) s_state = [-1] + list(map(int, input().rstrip().split())) n = int(input().rstrip()) for _ in range(n): mode, s_num = map(int, input().rstrip().split()) now_work = WORK[mode] now_work(s, s_state, s_num) s_state = s_state[1:] for i in range(s//20+1): start, end = i*20, (i*20)+20 print(*s_state[start:end]) return solution() """ 걸린 시간: 16분 시간 복잡도: 남자, 여자 둘 다 한 턴에 스위치 전체 길이인 s에 대해 O(s)이므로 전체 시간 복잡도는 학생 수가 n일 때, O(s*n) 이다. 해설: 남자(mode1), 여자(mode2)로 작업을 나눠서 배수는 1,2,3 올라가면서 시작 버튼에 곱해주고, 옆으로 확인은 gap을 +1 해주면서 확인한다. while 반복문의 기본 규칙은 1과 s 사이의 범위이고, mode2에서 추가 escape는 보고 있는 두 스위치의 상태가 다를 때이다. 메인 함수에서는 mode에 맞게 work 함수를 할당 받은 후 작업을 진행하고, 20단위로 끊어서 출력한다. 추가로 worker 클래스를 만들어서 상속 받아서 하면 좀 더 안전한 코드가 될 것 같다. """