뒤집기와 연속 구간
시간 제한2초메모리 제한512 MB
이진 배열에서 구간 뒤집기 연산을 처리하면서, 주어진 구간 안에서 같은 값이 연속된 가장 긴 부분의 길이를 구한다.
문제
이진 배열은 각 원소가 0 또는 1인 배열이다. Aleka는 길이 N인 이진 배열 B를 가지고 있다. B의 원소는 1부터 N까지의 인덱스를 가진다.
Aleka는 배열을 가지고 놀 것이다. 그녀는 Q개의 질의를 차례로 수행한다. 각 질의는 다음 두 종류 중 하나이다.
FLIPL R: B의 인덱스 L부터 R까지(양 끝 포함)의 모든 비트를 뒤집는다. 비트를 뒤집는다는 것은 비트 값을 0에서 1로, 또는 1에서 0으로 바꾸는 것이다.COMBOL R: B에서 인덱스가 L부터 R까지(양 끝 포함)인 비트만 모은 부분 배열을 B'라 하자. B'의 연속 부분 배열 중 모든 원소의 값이 같은 것의 최대 길이를 구한다.
모든 질의는 입력 순서대로 수행하며, COMBO 질의마다 그 답을 출력한다.
입력
첫째 줄에 두 정수 N Q (1 ≤ N, Q ≤ 100,000)가 주어진다. 이는 배열의 길이와 질의의 수를 나타낸다. 둘째 줄에 N개의 문자('0' 또는 '1')로 이루어진 문자열이 주어진다. 이 문자열은 이진 배열 B를 나타내며, i번째 문자는 B의 i번째 원소에 대응한다('0'은 0을, '1'은 1을 나타낸다). 다음 Q개의 줄에는 각각 세 정수 T L R (1 ≤ T ≤ 2; 1 ≤ L ≤ R ≤ N)가 주어지며 질의를 나타낸다. T = 1이면 FLIP 질의이고, 그렇지 않으면 COMBO 질의이다.
출력
COMBO 질의마다 그 답을 질의가 수행된 순서대로 출력한다.