수열과 쿼리 31

0과 1로 이루어진 수열에서 구간 뒤집기 갱신과, 임의 구간에서 1로만 이루어진 가장 긴 연속 구간의 길이를 구하는 쿼리를 처리한다.

어려움8세그먼트 트리연결 리스트구현분할 정복아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

길이가 N이고 0과 1로만 이루어진 수열 A1, A2, ..., AN이 주어진다. 이때, 다음 쿼리를 수행하는 프로그램을 작성하시오.

  • 1 L R: A의 [L, R] 구간에 들어있는 수의 순서를 뒤집는다. 즉, 이 쿼리의 결과를 수열 B라고 했을 때, BL = AR, BL+1 = AR-1, ..., BR = AL가 되는 것이고, L ≤ i ≤ R에 포함되지 않은 모든 i의 Bi = Ai이다.
  • 2 L R: A의 연속하는 부분 수열 AL, AL+1, ..., AR에서 1로만 이루어진 가장 긴 연속하는 부분 수열의 길이를 출력한다. 1로만 이루어진 연속하는 부분 수열이 없는 경우에는 0을 출력한다.

입력

첫째 줄에 수열의 크기 N이 주어진다. (1 ≤ N ≤ 100,000)

둘째 줄에는 A1, A2, ..., AN이 주어진다. (0≤ Ai ≤ 1)

셋째 줄에는 쿼리의 개수 M이 주어진다. (1 ≤ M ≤ 200,000)

넷째 줄부터 M개의 줄에는 쿼리가 한 줄에 하나씩 주어진다. (1 ≤ L ≤ R ≤ N) 2번 쿼리는 한 번 이상 주어진다.

출력

2번 쿼리의 결과를 한 줄에 하나씩 출력한다.