짝수 길이의 짝수 합

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

요약
0과 1로 이루어진 문자열에서 한 문자를 반전하는 갱신과, 구간 안에 1의 개수가 짝수인 짝수 길이 부분 문자열이 존재하는지 묻는 쿼리를 처리한다.
난이도

보통10점 중 6점

유형
누적 합, 수학, 구현, 배열
정답자
아직 제출이 없습니다

문제

길이가 NN이고 00과 11로만 이루어진 문자열이 입력으로 주어진다. 이때, 다음과 같은 쿼리를 수행해 보자.

  • 1,i1 \\, i: ii번째 문자를 반전한다. 즉, ii번째 문자가 00이면 11로 바꾸고, 그렇지 않으면 00으로 바꾼다. (1≤i≤N1 \le i \le N)

  • 2,x,y2 \\, x \\, y: 다음 조건을 모두 만족하는 정수 l,rl, r이 있다면 YES, 그렇지 않으면 NO를 출력한다. (1≤x≤y≤N1 \le x \le y \le N)

    • x≤l≤r≤yx \le l \le r \le y
    • ll번째 문자부터 rr번째 문자까지의 부분 문자열의 길이, 즉 r−l+1r-l+1은 짝수이다.
    • ll번째 문자부터 rr번째 문자까지의 부분 문자열에 있는 r−l+1r-l+1개의 숫자의 합, 즉 숫자 11의 개수는 짝수이다. 단, 00도 짝수로 간주한다.

쿼리가 누적해서 수행됨에 유의하여라.

입력

첫째 줄에 정수 NN과 QQ가 공백으로 구분되어 주어진다. (1≤N,Q≤300,000)(1 \le N, Q \le 300\\, 000)

둘째 줄에 00과 11로만 이루어져 있는, 길이가 NN인 문자열이 주어진다.

셋째 줄부터 QQ개의 줄에 걸쳐 쿼리가 주어진다.

11번 쿼리의 경우, 1,i1 \\, i의 형식으로 주어진다. (1≤i≤N)(1 \le i \le N)

22번 쿼리의 경우, 2,x,y2 \\, x \\, y의 형식으로 주어진다. (1≤x≤y≤N)(1 \le x \le y \le N)

22번 쿼리가 한 개 이상 주어짐이 보장된다.

쿼리에서 입력으로 주어지는 모든 수는 정수이다.

출력

22번 쿼리가 주어질 때마다, 쿼리의 답을 한 줄에 하나씩 순서대로 출력한다.

힌트

어떤 문자열의 부분 문자열은 그 문자열의 비어 있지 않은 연속된 부분으로 정의한다.

예제1

  1. 예제 1

    입력
    3 4
    101
    2 1 3
    1 1
    2 2 2
    2 1 2
    
    예상 출력
    NO
    NO
    YES