結果

問題 No.1730 GCD on Blackboard in yukicoder
ユーザー lam6er
提出日時 2025-04-15 23:15:29
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 190 ms / 2,000 ms
コード長 1,024 bytes
コンパイル時間 450 ms
コンパイル使用メモリ 81,708 KB
実行使用メモリ 131,404 KB
最終ジャッジ日時 2025-04-15 23:17:50
合計ジャッジ時間 5,460 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 24
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys

def main():
    input = sys.stdin.read().split()
    idx = 0
    N = int(input[idx])
    idx += 1
    A = list(map(int, input[idx:idx+N]))
    idx += N

    max_A = max(A)
    cnt_vals = [0] * (max_A + 2)
    for a in A:
        cnt_vals[a] += 1

    # Compute frequency of each divisor
    freq = [0] * (max_A + 2)
    for d in range(1, max_A + 1):
        multiple = d
        while multiple <= max_A:
            freq[d] += cnt_vals[multiple]
            multiple += d

    # Initialize max_d array
    max_d = [0] * N  # max_d[c] is the maximum d with cnt[d] = c
    for d in range(1, max_A + 1):
        c = N - freq[d]
        if c < N:  # since K can be up to N-1
            if d > max_d[c]:
                max_d[c] = d

    # Compute prefix maximum array
    prefix_max = [0] * N
    prefix_max[0] = max_d[0]
    for k in range(1, N):
        prefix_max[k] = max(prefix_max[k-1], max_d[k])

    # Output results
    for k in range(N):
        print(prefix_max[k])

if __name__ == '__main__':
    main()
0