만드는 중입니다

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

이진 수열과 쿼리

시간 제한3초메모리 제한1024 MB

요약
이진 수열에서 값을 바꾸는 연산과 구간 질의가 주어집니다. 질의 구간 안에서 0의 최장 연속 길이가 x, 1의 최장 연속 길이가 y인 부분 구간 [s, e]를 찾고, 없으면 -1을 출력합니다.
난이도

어려움10점 중 8점

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

문제

길이가 nn인 이진 수열 a1,a2,…,ana_1, a_2, \ldots, a_n이 주어진다. 또한 두 가지 종류의 쿼리가 qq개 주어진다.

  1. pp tt: apa_p를 tt로 바꾼다.

  2. ll rr xx yy: 다음 조건을 모두 만족하는 [s,e][s, e]를 하나 찾는다. 그러한 구간이 없으면 없다고 보고한다.

  • l≤s≤e≤rl \leq s \leq e \leq r
  • as,as+1,…,aea_s, a_{s+1}, \ldots, a_e에서 연속된 0의 최대 개수가 xx이다.
  • as,as+1,…,aea_s, a_{s+1}, \ldots, a_e에서 연속된 1의 최대 개수가 yy이다.

입력

첫 줄에는 정수 nn과 qq가 주어진다 (1≤n,q≤2×1051 \leq n, q \leq 2 \times 10^5).

둘째 줄에는 길이가 nn인 이진 문자열 a1a2…ana_1a_2 \ldots a_n이 주어진다.

이어서 qq개의 줄이 주어지며, 각 줄은 다음 중 하나의 형식이다.

  • 종류 1: 11 pp tt (1≤p≤n1 \leq p \leq n, t∈{0,1}t \in \{0, 1\})
  • 종류 2: 22 ll rr xx yy (1≤l≤r≤n1 \leq l \leq r \leq n, 0≤x,y≤n0 \leq x, y \leq n)

출력

종류 2 쿼리마다 조건을 만족하는 구간 [s,e][s, e]가 있으면 ss와 ee를 공백 하나로 구분해 출력한다. 없으면 −1-1을 출력한다.

답이 여러 개이면 그중 아무거나 출력해도 된다.

예제2

  1. 예제 1

    입력
    4 6
    0010
    2 1 4 1 1
    1 3 0
    2 1 4 1 1
    2 1 4 3 0
    1 4 1
    2 1 4 3 1
    
    예상 출력
    2 3
    -1
    1 3
    1 4
    
  2. 예제 2

    입력
    1 6
    1
    2 1 1 0 0
    2 1 1 1 0
    2 1 1 1 1
    1 1 0
    2 1 1 1 0
    2 1 1 0 1
    
    예상 출력
    -1
    -1
    -1
    1 1
    -1