만드는 중입니다

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

헬터 스켈터

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

요약
0으로 시작하는 이진 문자열의 런 길이가 주어질 때, 각 질의마다 0이 정확히 a개, 1이 정확히 b개인 부분 문자열이 있는지 판별합니다.
난이도

어려움10점 중 8점

유형
투 포인터, 누적 합, 수학
정답자
아직 제출이 없습니다

문제

이진 문자열은 '0'과 '1'로만 이루어진 비어 있지 않은 문자열이다. 문자열 s=s1s2…s∣s∣s = s_1 s_2 \ldots s_{|s|}의 부분 문자열 s[l…r]s[l \ldots r] (1≤l≤r≤∣s∣)(1 \le l \le r \le |s|)은 slsl+1…srs_l s_{l+1} \ldots s_r을 뜻한다.

장 교수는 '0'으로 시작하는 긴 이진 문자열 ss를 가지고 있다. 그는 ss의 부분 문자열 중에 '0'이 정확히 aa개, '1'이 정확히 bb개 들어 있는 것이 있는지 알고 싶다. 여기서 aa와 bb는 주어지는 두 정수이다.

문자열이 매우 길어서 다음 방식으로 압축한다.

  • 같은 문자가 연속으로 나오는 구간으로 문자열을 나눈다.
  • 인접한 두 구간의 문자는 서로 다르다. 각 구간의 길이를 차례로 적어 문자열을 나타낸다.

예를 들어 이진 문자열 00101100011110111101001111111의 구간은 {00,1,0,11,000,1111,0,1111,0,1,00,1111111}\{00, 1, 0, 11, 000, 1111, 0, 1111, 0, 1, 00, 1111111\}이며, 이는 {2,1,1,2,3,4,1,4,1,1,2,7}\{2, 1, 1, 2, 3, 4, 1, 4, 1, 1, 2, 7\}로 압축된다.

입력

첫 줄에 테스트 케이스의 수 TT가 주어진다. 각 테스트 케이스의 첫 줄에는 구간의 개수 nn과 질의의 개수 mm이 주어진다(1≤n≤10001 \le n \le 1000, 1≤m≤5⋅1051 \le m \le 5 \cdot 10^5).

다음 줄에는 각 구간의 길이 x1,x2,…,xnx_1, x_2, \ldots, x_n이 주어진다(1≤xi≤1061 \le x_i \le 10^6).

이어서 mm개의 줄에 두 정수 aia_i와 bib_i가 한 줄에 하나씩 주어진다(0≤ai,bi≤∣s∣0 \le a_i, b_i \le |s|, 1≤ai+bi≤∣s∣1 \le a_i + b_i \le |s|). 각 질의는 '0'이 정확히 aia_i개, '1'이 정확히 bib_i개인 부분 문자열이 ss에 있는지 묻는다.

테스트 케이스는 최대 200개이며, 전체 입력 크기는 20 MiB 이하이다. 모든 테스트 케이스의 mm을 합하면 2⋅1062 \cdot 10^6 이하이다.

출력

각 테스트 케이스마다 길이 mm인 이진 문자열을 한 줄에 출력한다. ii번째 자리는 ii번째 질의의 답이 가능하면 '1', 불가능하면 '0'이다.

예제1

  1. 예제 1

    입력
    3
    2 3
    3 4
    3 0
    3 4
    1 2
    3 4
    1 2 3
    5 1
    4 2
    1 3
    3 2
    12 10
    2 1 1 2 3 4 1 4 1 1 2 7
    2 1
    2 2
    2 3
    2 4
    2 5
    4 1
    4 2
    4 3
    4 4
    4 5
    
    예상 출력
    111
    0101
    1111101111