만드는 중입니다

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

스퀘어 게임

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

요약
정수 수열의 구간마다 k가 k개 있으면 k^2 하나로 바꾸는 연산을 최대 몇 번 할 수 있는지 구합니다.
난이도

어려움10점 중 8점

유형
분할 정복, 그리디, 해시맵
정답자
아직 제출이 없습니다

문제

2 이상의 정수 kk에 대해, kk개의 kk를 k2k^2 한 개로 바꾸는 작업을 "스퀘어"라고 하자.

정수 nn개 a1,a2,…,ana_1, a_2, \ldots, a_n이 주어진다. 다음 쿼리를 처리하는 프로그램을 작성하시오.

  • ll rr: 수열 al,al+1,…,ara_l, a_{l+1}, \ldots, a_r에서 가능한 스퀘어의 최대 횟수를 구하여 출력한다.

예를 들어, 수열 2,4,2,4,2,22, 4, 2, 4, 2, 2에서 2개의 2를 4로 바꾸는 작업을 두 번 하면 4,4,4,44, 4, 4, 4가 된다. 이후 4개의 4를 16으로 바꿀 수 있으므로 스퀘어는 총 3번 가능하다. 따라서 이 수열에서 가능한 스퀘어의 최대 횟수는 3이다.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다. 이어서 TT개의 테스트 케이스가 주어진다. (1≤T≤321 \le T \le 32)

각 테스트 케이스의 첫 줄에는 정수 nn이 주어진다. (1≤n≤50 0001 \le n \le 50\,000)

다음 줄에는 nn개의 정수 a1,a2,…,ana_1, a_2, \ldots, a_n이 공백으로 구분되어 주어진다. (1≤ai≤1 000 000 0001 \le a_i \le 1\,000\,000\,000)

다음 줄에는 쿼리의 개수 QQ가 주어진다. (1≤Q≤50 0001 \le Q \le 50\,000)

다음 QQ개 줄의 ii번째 줄에는 ii번째 쿼리를 나타내는 두 정수 lil_i, rir_i가 공백으로 구분되어 주어진다. (1≤li≤ri≤n1 \le l_i \le r_i \le n)

출력

각 테스트 케이스마다 첫 줄에 "Case #CC"를 출력한다. 이때 CC는 테스트 케이스의 번호이다.

다음 QQ개 줄에는 가능한 스퀘어의 최대 횟수를 출력한다.

예제1

  1. 예제 1

    입력
    1
    12
    2 3 2 3 4 3 2 3 2 1 2 2
    3
    1 12
    2 7
    3 8
    
    예상 출력
    Case #1
    5
    2
    2