N개의 전구가 있고, 전구의 상태는 1 : 켜져 있음, 0 : 꺼져 있음을 의미한다.
전구 제어 명령은 아래와 같다.
1. [i x] : i번째 전구를 x로 변경한다
2. [l r] : l ~ r번째까지 전구 상태를 반전시킨다
3. [l r] : l ~ r번째까지 전구를 끈다
4. [l r] : l ~ r번째까지 전구를 킨다
어려운 문제는 아니였다.
그냥 Brute-Force 방식으로 직접 배열에 상태를 저장해놓고 전구 제어 명령에 따라 상태를 바꾸면 된다.
import java.io.*;
import java.util.*;
public class Main {
static StringBuilder sb = new StringBuilder();
static FastReader sc = new FastReader();
static int N,M;
static int[] arr;
static void case_one(int i, int x) {
arr[i] = x;
}
static void case_two(int l, int r) {
for(int i =l;i<r+1;i++) {
arr[i] = (arr[i] + 1)%2;
}
}
static void case_three(int l, int r) {
for(int i =l;i<r+1;i++) arr[i] = 0;
}
static void case_four(int l, int r) {
for(int i =l;i<r+1;i++) arr[i] = 1;
}
public static void main(String[] args) {
N = sc.nextInt();
M = sc.nextInt();
arr = new int[N+1];
for(int i =1;i<N+1;i++) {
arr[i]= sc.nextInt();
}
for(int rec=0;rec<M;rec++) {
int how = sc.nextInt();
int first = sc.nextInt();
int second = sc.nextInt();
switch(how) {
case 1:
case_one(first, second);
break;
case 2:
case_two(first, second);
break;
case 3:
case_three(first, second);
break;
case 4:
case_four(first, second);
break;
}
}
for(int i =1;i<N+1;i++) sb.append(arr[i]).append(" ");
System.out.println(sb);
}
static class FastReader // 빠른 입력을 위한 클래스
}