ABC143F 题解
前言
很有趣的题。提供一种和现有题解略微不同的做法。
思路
突破点在于反着想。当最多能取
统计一下每个数字出现的次数
不妨设其为
于是直接求即可。唯一的问题是如何快速求
线性复杂度。
代码
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 3e5 + 5;
int a[N], tt[N], cnt[N];
long long tmp[N], f[N], ans[N];
int main()
{
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%d", &a[i]), tt[i] = a[i];
sort(a + 1, a + n + 1), sort(tt + 1, tt + n + 1);
int cur = unique(tt + 1, tt + n + 1) - tt - 1;
for (int i = 1; i <= n; i++) a[i] = lower_bound(tt + 1, tt + cur + 1, a[i]) - tt;
for (int i = 1; i <= n; i++) cnt[a[i]]++;
sort(cnt + 1, cnt + cur + 1);
for (int i = 1, j = 0; i <= cur; i++)
while (j < cnt[i])
tmp[++j] = cur - i + 1;
long long sum = 0;
for (int i = 1; i <= n; i++) sum += tmp[i], f[i] = sum / i;
for (int i = 0; i <= n; i++)
for (int j = f[i + 1] + 1; j <= f[i]; j++)
ans[j] = i;
for (int i = 1; i <= n; i++) printf("%lld\n", ans[i]);
return 0;
}
希望能帮助到大家!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具