만드는 중입니다

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

피보나치 분할

시간 제한10초메모리 제한256 MB

요약
각 연산마다 X에 a_i × F_{b_i}를 더한 뒤, X를 서로 다른 피보나치 수 여러 개의 합으로 나타낼 때 가능한 최대 개수인 partition(X)를 구합니다.
난이도

어려움10점 중 9점

유형
수학, 정수론, 세그먼트 트리
정답자
아직 제출이 없습니다

문제

피보나치 수열은 다음과 같이 정의된다: F_n=\\begin{cases} 1 & n=1 \\\\ 2 & n=2 \\\\ F_{n-1}+F_{n-2} & \\text{otherwise} \\end{cases}

수열의 처음 몇 개 원소는 1,2,3,5,8,13,21,34,dots1, 2, 3, 5, 8, 13, 21, 34, \\dots 이다.

양의 정수 nn에 대해 mathitpartition(n)\\mathit{partition}(n)은 nn을 서로 다른 피보나치 수 mm개의 합으로 나타낼 수 있는 mm의 최댓값이다. 예를 들어 mathitpartition(1)=mathitpartition(2)=1\\mathit{partition}(1) = \\mathit{partition}(2) = 1, mathitpartition(3)=mathitpartition(4)=mathitpartition(5)=mathitpartition(7)=2\\mathit{partition}(3) = \\mathit{partition}(4) = \\mathit{partition}(5) = \\mathit{partition}(7) = 2, mathitpartition(6)=mathitpartition(8)=3\\mathit{partition}(6) = \\mathit{partition}(8) = 3이다.

Chiaki는 처음에 0인 정수 XX를 가지고 있다. 그녀는 XX에 대해 여러 번 연산을 수행한다. ii번째 연산은 aicdotFbia_i \\cdot F_{b_i}를 XX에 더한다. 매 연산 후 mathitpartition(X)\\mathit{partition}(X)의 값을 구하려고 한다. 매 연산 후 XX는 양의 정수임이 보장된다.

입력

입력에는 여러 테스트 케이스가 포함된다. 첫 줄에는 테스트 케이스의 수 TT가 주어진다. 각 테스트 케이스는 다음과 같다.

첫 줄에 연산의 수 nn (1lenle5cdot1041 \\le n \\le 5 \\cdot 10^4)이 주어진다.

이어지는 nn개의 줄에는 정수 aia_i와 bib_i (1le∣ai∣,bile1091 \\le |a_i|, b_i \\le 10^9)가 주어진다.

모든 테스트 케이스의 nn을 합한 값은 5cdot1045 \\cdot 10^4을 넘지 않는다.

출력

각 테스트 케이스마다 nn개의 정수를 출력한다. ii번째 정수는 ii번째 연산 후 mathitpartition(X)\\mathit{partition}(X)의 값이다.

힌트

예시에서 각 연산 후 XX의 값은 1,2,4,7,12,20,33,54,88,721, 2, 4, 7, 12, 20, 33, 54, 88, 72이다.

예제1

  1. 예제 1

    입력
    1
    10
    1 1
    1 1
    1 2
    1 3
    1 4
    1 5
    1 6
    1 7
    1 8
    -2 5
    
    예상 출력
    1
    1
    2
    2
    3
    3
    4
    4
    5
    6