스퀘어 게임

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

요약
수열이 주어질 때 각 쿼리마다 구간에서 k개의 k를 k^2로 합치는 작업을 최대로 몇 번 할 수 있는지 구한다.
난이도

어려움10점 중 9점

유형
수학, 정수론, 그리디, 누적 합
정답자
아직 제출이 없습니다

문제

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

nn개의 정수 a_1,a_2,…,a_na\_1, a\_2, \ldots , a\_n가 주어진다. 다음 쿼리를 처리하는 프로그램을 작성하시오.

  • ll rr: 수열 a_l,a_l+1,…,a_ra\_l, a\_{l+1}, \ldots , a\_r 에서 가능한 스퀘어의 최대 횟수를 구하여 출력한다.

예를 들어, 수열 2,4,2,4,2,22, 4, 2, 4, 2, 2 에서 22개의 22를 44로 바꾸는 작업을 두 번 하고 나면 4,4,4,44, 4, 4, 4 가 되어 44개의 44를 1616으로 바꿀 수 있어 총 33번의 스퀘어가 가능하고, 수열에서 가능한 스퀘어의 최대 횟수는 33이다.

입력

파일의 첫째 줄에 테스트 케이스의 개수를 나타내는 자연수 TT 가 주어지고,

이후 차례로 TT 개의 테스트 케이스가 주어진다. (1≤T≤321 \le T \le 32)

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

다음줄에는 nn개의 정수 a_1,a_2,…,a_na\_1, a\_2, \ldots , a\_n가 공백으로 구분되어 주어진다. (1≤a_i≤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번째 쿼리를 나타내는 두 정수 l_i,r_il\_i, r\_i가 공백으로 구분되어 주어진다. (1≤l_i≤r_i≤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