PivotOJ

Fibonacci Compression

시간 제한: 1000ms메모리 제한: 512MB출처: UKIEPC 2018BOJ 17570

문제

Fibonacci compression is a new type of fault-tolerant compression based on Fibonacci numbers. Symbols are constructed according to the rule that no code word may have two consecutive “1” bits at any place other than the end, where they are mandatory. In practice this means that, for each compressed symbol bit-length i where i ≥ 2, there are Fibonacci(i − 1) compressed symbols of that length.

For example, the shortest 14 Fibonacci code words are as follows:

11       011      0011    1011
00011    10011    01011   000011
100011   010011   001011  101011
0000011  1000011  ...

Compressing a string using Fibonacci compression works by replacing the most frequent characters with the shortest codes. Given one such string s, find the length of each of its prefixes when compressed as small as possible according to this system.

입력

  • One line containing the length of the string to compress, n (1 ≤ n ≤ 105).
  • One line containing the string s as a sequence of n integers si (0 ≤ si ≤ 106).

출력

Output |s| lines, where the ith line is the compressed length of the first i characters of s, in bits.

예제

예제 1

입력
4
97 97 98 98
출력
2 4 7 10

예제 2

입력
24
1 75 2 1 1 75 75 75 75 75 75 2 2 3 4 5 6 7 8 9 10 11 12 10
출력
2 5 9 11 13 16 19 21 23 25 27 31 35 39 44 49 54 60 66 72 78 84 91 95
코드를 제출하려면 로그인하세요.