import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) throws IOException {
// 입력
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(bufferedReader.readLine());
List<Integer> sw = Arrays.stream(bufferedReader.readLine().split(" "))
.map(Integer::parseInt)
.collect(Collectors.toList());
int size = Integer.parseInt(bufferedReader.readLine());
for (int i = 0; i < size; i++) {
String[] split = bufferedReader.readLine().split(" ");
// 성별 조건으로 스위치 조작
if (split[0].equals("1")) { // 남
for (int j = 0; j < sw.size(); j++) {
if ((j+1) % Integer.parseInt(split[1]) != 0) {
continue;
}
changeSw(sw, j);
}
} else { // 여
int index = Integer.parseInt(split[1]) - 1;
changeSw(sw, index);
// 좌우 대칭 확인
for (int j = 1; j <= sw.size() / 2 + 1; j++) {
int leftIdx = index - j;
int rightIdx = index + j;
if (leftIdx < 0 || rightIdx > sw.size() - 1) {
break;
}
int leftItem = sw.get(leftIdx);
int rightItem = sw.get(rightIdx);
if (leftItem == rightItem) {
changeSw(sw, index - j);
changeSw(sw, index + j);
} else {
break;
}
}
}
}
printFormat(sw);
}
private static void printFormat(List<Integer> sw) {
for (int i = 0; i < sw.size(); i++) {
if ((i + 1) % 20 == 0 || i == sw.size() - 1) {
System.out.println(sw.get(i));
continue;
}
System.out.print(sw.get(i) + " ");
}
}
private static void changeSw(List<Integer> sw, int idx) {
if (sw.get(idx) == 0) {
sw.set(idx, 1);
} else {
sw.set(idx, 0);
}
}
}
주어진 조건에 맞게 입력받고 단순 구현하면 되는 간단한 문제였다.
하지만 출력형식
이 조금 까다로워서, 따로 함수로 빼서 처리해주었다.