아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

수열과 쿼리 31

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

요약
0과 1로 이루어진 수열에서 구간을 뒤집는 갱신과, 주어진 구간에서 연속한 1의 최대 길이를 구하는 질의를 처리한다.
난이도

어려움10점 중 8점

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

문제

길이가 NN이고 0과 1로만 이루어진 수열 A1,A2,…,ANA_1, A_2, \dots, A_N이 주어진다. 다음 쿼리를 수행하는 프로그램을 작성하시오.

  • 1 L R: AA의 [L,R][L, R] 구간에 들어 있는 수의 순서를 뒤집는다. 이 쿼리의 결과를 수열 BB라고 하면 BL=ARB_L = A_R, BL+1=AR−1B_{L+1} = A_{R-1}, ..., BR=ALB_R = A_L이고, L≤i≤RL \le i \le R에 포함되지 않는 모든 ii에 대해 Bi=AiB_i = A_i이다.
  • 2 L R: AA의 연속하는 부분 수열 AL,AL+1,…,ARA_L, A_{L+1}, \dots, A_R에서 1로만 이루어진 가장 긴 연속하는 부분 수열의 길이를 출력한다. 1로만 이루어진 연속하는 부분 수열이 없으면 0을 출력한다.

입력

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

둘째 줄에는 A1,A2,…,ANA_1, A_2, \dots, A_N이 주어진다. (0≤Ai≤10 \le A_i \le 1)

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

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

출력

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

예제1

  1. 예제 1

    입력
    4
    0 1 0 1
    3
    2 2 4
    1 3 4
    2 2 4
    
    예상 출력
    1
    2