만드는 중입니다

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

장난감 오렌지 만들기

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

요약
각 블록을 두 색을 잇는 간선으로 보고, 구간 [l, r]의 블록을 모두 써서 원을 만들 수 있는지, 만들 수 있다면 최소 몇 개인지 묻습니다.
난이도

보통10점 중 7점

유형
그래프, 유니온 파인드, 분할 정복
정답자
아직 제출이 없습니다

문제

17살 아기 정후는 가장 좋아하는 조립식 장난감으로 놀고 있다. 정후는 이 장난감으로 오렌지를 만들려고 한다.

정후에게는 NN개의 조립식 장난감 블록이 있다. 블록 하나에는 연결 고리가 두 개 있고, 연결 고리를 맞대면 두 블록을 이어 붙일 수 있다. 연결 고리는 10910^9가지 색 중 하나로 칠해져 있으며, 색에는 11부터 10910^9까지 번호가 붙어 있다. ii번 블록에는 aia_i번 색 연결 고리와 bib_i번 색 연결 고리가 있다. 두 연결 고리의 색은 항상 다르다. 즉 ai≠bia_i \neq b_i이다. 아래 그림은 블록 세 개의 예시이다.

오렌지는 둥글기 때문에, 블록으로 오렌지를 만들려면 블록이 원형으로 연결되어야 한다. 이때 같은 색 연결 고리끼리만 이을 수 있다. 아래는 올바른 오렌지와 올바르지 않은 오렌지의 예시이다. 첫 번째 예시는 올바른 오렌지이다. 두 번째 예시는 연결 고리의 색이 달라서 이을 수 없다. 세 번째 예시는 원형으로 연결되어 있지 않아서 올바른 오렌지가 아니다.

정후는 블록을 일렬로 늘어놓고 1번부터 NN번까지 차례로 번호를 붙였다. 정후는 연속한 몇 개의 블록으로 오렌지를 만들고 싶어 하지만 방법을 찾지 못해서 당신에게 도움을 요청했다. 당신은 다음 두 종류의 질문에 답하는 프로그램을 작성해야 한다.

  • [li,ri][l_i, r_i] 범위에 있는 블록을 모두 사용해서 오렌지를 하나 이상 만들 수 있는가? 오렌지가 하나만 만들어질 필요는 없다.
  • 만들 수 있다면, 만들어지는 오렌지의 최소 개수는 몇 개인가?

입력

첫 번째 줄에는 블록의 개수 NN과 질문의 개수 QQ가 주어진다.

두 번째 줄에는 각 블록의 첫째 연결 고리 색 a1,a2,⋯ ,aNa_1, a_2, \cdots, a_N이 주어진다.

세 번째 줄에는 각 블록의 둘째 연결 고리 색 b1,b2,⋯ ,bNb_1, b_2, \cdots, b_N이 주어진다.

네 번째 줄부터 QQ개의 줄에 걸쳐 질문이 li ril_i \ r_i 형태로 한 줄에 하나씩 주어진다.

출력

각 질문에 대해 답을 한 줄에 하나씩 출력한다.

  • [li,ri][l_i, r_i] 범위의 블록을 이용해 오렌지를 만들 수 없다면 -1을 출력한다.
  • 만들 수 있다면 만들어지는 오렌지의 최소 개수를 출력한다.

제한

  • 2≤N,Q≤5×1052 \le N, Q \le 5 \times 10^5
  • 1≤ai,bi≤1091 \le a_i, b_i \le 10^9
  • ai≠bia_i \neq b_i
  • 1≤li≤ri≤N1 \le l_i \le r_i \le N

힌트

오렌지를 만들려면 블록이 최소 두 개 필요하다. 블록 두 개의 연결 고리 색이 같으면, 그 두 블록만으로 오렌지를 만들 수 있다.

예제2

  1. 예제 1

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

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