가희와 신칸센 2

면접 대비

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

요약
지상, 터널, 역으로 이루어진 문자열에서 구간의 지상을 터널로 바꾸며 이웃과 합쳐지고, 터널 개수와 가장 긴 터널, 가장 짧은 터널을 출력하는 문제입니다.
난이도

어려움10점 중 8점

유형
배열, 구간, 유니온 파인드, 구현
정답자
아직 제출이 없습니다

문제

도쿄에서 니가타를 잇는 조에츠 신칸센은 긴 터널이 많습니다. 간토평야를 지난 후 험준한 산악 지대를 통과하기 때문입니다. 이 노선은 터널, 지상 구간, 역으로 구분할 수 있습니다. 터널의 시점과 종점의 정의는 다음과 같습니다.

  • 터널 TT가 ss에서 시작하여 ee에서 끝난다면, 즉 구간 \[s,e)\[s, e)가 터널 TT의 구간이라면, 터널 TT의 시점과 종점은 각각 ss, ee가 됩니다.

호기심이 많은 가희는 조에츠 신칸센 노선이 변할 때마다 해당 노선에서 가장 긴 터널과 가장 짧은 터널, 그리고 터널의 개수가 궁금해졌습니다. 가희를 도와주세요. 가장 긴 터널과 가장 짧은 터널의 정의는 다음과 같습니다.

  • 가장 긴 터널은 노선 내에서 길이가 제일 긴 터널입니다. 그러한 터널이 여러 개라면, 그중 시점이 가장 작은 터널입니다.
  • 가장 짧은 터널은 노선 내에서 길이가 제일 짧은 터널입니다. 그러한 터널이 여러 개라면, 그중 시점이 가장 작은 터널입니다.

입력

첫 번째 줄에 노선의 길이 LL이 주어집니다.

두 번째 줄에 길이가 LL인 문자열이 주어집니다. xx번째에 있는 문자는 다음을 의미합니다.

  • 구간 \[x,x+1)\[x, x+1)에 대해 문자가 0이면 지상 구간, 1이면 터널, 2이면 역입니다.

세 번째 줄에 쿼리의 개수 QQ가 주어집니다.

네 번쨰 줄부터 QQ개의 줄에 걸쳐 다음 두 개의 쿼리 중 하나가 한 줄에 하나씩 주어집니다.

  • 11 ss ee : 구간 \[s,e)\[s, e)에 속한 모든 지상 구간에 터널을 즉시 건설합니다. 또한 새로 생긴 터널이 기존 터널과 연결되는 경우, 새로 생긴 터널은 기존 터널과 합쳐집니다. (1≤s<e≤L)(1 \leq s \lt e \leq L)
  • 22 : 문제에 대한 답을 출력합니다.

출력

22번 쿼리가 나올 때마다 다음과 같이 출력해 주세요.

터널이 노선 내에 없는 경우 -1만 출력해 주세요. 그렇지 않은 경우 다음 형식으로 출력해 주세요. 55개의 값은 공백으로 구분해서 출력해 주세요.

{tunnel_num} {longest_tunnel_s} {longest_tunnel_e} {shortest_tunnel_s} {shortest_tunnel_e}

각 요소에 대한 설명은 다음과 같습니다.

  • tunnel_num : 조에츠 신칸센 노선에 있는 터널 개수입니다.
  • longest_tunnel_s : 조에츠 신칸센 노선에 있는 터널 중 가장 긴 터널의 시점
  • longest_tunnel_e : 조에츠 신칸센 노선에 있는 터널 중 가장 긴 터널의 종점
  • shortest_tunnel_s : 조에츠 신칸센 노선에 있는 터널 중 가장 짧은 터널의 시점
  • shortest_tunnel_e : 조에츠 신칸센 노선이 있는 터널 중 가장 짧은 터널의 종점

제한

  • 노선의 양 끝은 역입니다.
  • 10≤L≤2×10610 \leq L \leq 2 \times 10^{6}
  • 1≤Q≤1061 \leq Q \leq 10^{6}
  • 22번 쿼리는 최소 한 번 이상 등장합니다.

힌트

조에츠 신칸센이 왜 이 타이밍에 뜬금없이 등장했을까?

예제4

  1. 예제 1

    입력
    10
    2000000002
    7
    1 4 5
    1 2 3
    2
    1 6 8
    2
    1 3 4
    2
    
    예상 출력
    2 2 3 2 3
    3 6 8 2 3
    2 2 5 6 8
    
  2. 예제 2

    입력
    10
    2010011002
    3
    2
    1 2 5
    2
    
    예상 출력
    2 6 8 3 4
    2 2 5 6 8
    
  3. 예제 3

    입력
    10
    2010011002
    7
    2
    1 2 5
    2
    1 6 10
    2
    1 1 10
    2
    
    예상 출력
    2 6 8 3 4
    2 2 5 6 8
    2 6 10 2 5
    1 2 10 2 10
    
  4. 예제 4

    입력
    10
    2000000002
    1
    2
    
    예상 출력
    -1