結果
問題 |
No.3269 Leq-K Partition
|
ユーザー |
![]() |
提出日時 | 2025-08-03 14:52:41 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 4,912 ms / 6,000 ms |
コード長 | 1,079 bytes |
コンパイル時間 | 261 ms |
コンパイル使用メモリ | 82,784 KB |
実行使用メモリ | 91,840 KB |
最終ジャッジ日時 | 2025-08-11 21:38:59 |
合計ジャッジ時間 | 85,880 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 27 |
ソースコード
from sys import stdin, stdout from math import sqrt, floor, log2 N = int(stdin.readline()) A = list(map(int, stdin.readline().split())) vis = [False for _ in range(N+1)] def calc(k): global vis pre = 0 res = 0 distinct = k for i in range(N): if not vis[A[i]]: if distinct == k: res += 1 for j in range(pre, i): vis[A[j]] = False distinct = 1 pre = i else: distinct += 1 vis[A[i]] = True for i in range(pre, N): vis[A[i]] = False return res ans = [0 for _ in range(N+1)] B = max(1, floor(sqrt(N * log2(N)))) for i in range(1, B): ans[i] = calc(i) q = (N + B - 1) // B for f in range(1, q+1): ok = N ng = B-1 while ok - ng > 1: mid = (ok + ng) // 2 if calc(mid) <= f: ok = mid else: ng = mid while ok <= N and ans[ok] == 0: ans[ok] = f ok += 1 stdout.write("".join(str(ans[i]) + "\n" for i in range(1, N+1)))