만드는 중입니다

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

가로등

시간 제한5초메모리 제한512 MB

요약
가로등 n개의 상태를 바꾸는 작업과 질의가 q번 주어집니다. 각 질의마다 a에서 b까지 이동할 수 있었던 시간 단위의 총합을 구합니다.
난이도

어려움10점 중 8점

유형
세그먼트 트리, 구현
정답자
아직 제출이 없습니다

문제

이노폴리스에서는 자율 주행 택시가 운행하고 있다. 이 도시의 도로망은 택시를 탈 수 있는 정류장 n+1n+1개와 이들을 잇는 도로 nn개로 이루어진다. 도로마다 가로등이 하나씩 있다. ii번 가로등이 켜져 있으면 정류장 ii와 정류장 i+1i+1을 잇는 도로를 밝힌다. 꺼져 있으면 이 도로는 어둡다.

보안 문제로 자율 주행 택시는 가로등이 켜진 도로만 달릴 수 있다. 즉, 택시가 정류장 aa에서 정류장 bb로 가려면(a<ba < b), 정류장 aa와 a+1a+1을 잇는 도로부터 정류장 b−1b-1과 bb를 잇는 도로까지 가로등이 모두 켜져 있어야 한다.

가로등은 고장이 나거나 수리되면서 켜지거나 꺼질 수 있다.

시점 0에는 가로등의 초기 상태가 주어진다. 시점 1,2,…,q1, 2, \ldots, q마다 다음 두 가지 중 하나가 일어난다.

  • toggle i: ii번 가로등의 상태를 반전한다. 켜져 있었다면 꺼지고, 꺼져 있었다면 켜진다.
  • query a b: 자율 주행 택시를 운영하는 곳의 대표가 궁금해한다. 시점 0부터 현재까지 택시가 정류장 aa에서 정류장 bb까지 운행할 수 있었던 총 시간은 얼마인가?

이 질의에 답하는 것을 도와주자.

입력

첫 줄에 두 정수 nn, qq가 주어진다 (1≤n,q≤300 0001 \le n, q \le 300\,000). 각각 가로등의 수와 이벤트의 개수이다.

둘째 줄에는 최초 가로등 상태를 나타내는 문자열 ss가 주어진다 (∣s∣=n|s| = n). sis_i가 1이면 가로등 ii가 켜져 있고, 0이면 꺼져 있다.

다음 qq개의 줄에는 이벤트가 하나씩 주어진다. ii번째 줄은 ii 시간에 일어난 이벤트를 설명한다.

  • toggle i (1≤i≤n1 \le i \le n): 가로등 ii의 상태를 반전한다.
  • query a b (1≤a<b≤n+11 \le a < b \le n+1): 정류장 aa에서 정류장 bb까지 택시가 운행할 수 있었던 총 시간 수를 구한다.

이벤트 중 적어도 하나는 query이다.

출력

각 query 이벤트마다 답을 나타내는 정수를 한 줄에 하나씩 출력한다.

힌트

예제 입력의 결과는 다음과 같다.

시간가로등 상태이벤트응답
111011
query 1 21
211011
query 1 21 and 2
311011
query 1 6None
411011
query 3 4None
511011
toggle 3
611111
query 3 46
711111
query 1 66 and 7

예제1

  1. 예제 1

    입력
    5 7
    11011
    query 1 2
    query 1 2
    query 1 6
    query 3 4
    toggle 3
    query 3 4
    query 1 6
    
    예상 출력
    1
    2
    0
    0
    1
    2