CF1676F Longest Strike 题解
题意
给你一个长度为
- 对于任何整数
, 在 中的出现次数不少于 次。 - 最大化
。
无解输出 -1
。
思路
看到出现次数,先把
发现装不进去,就离散化一下再装进桶
令
接着按离散化后的
- 如果
,区间可以包含 ,则 ,- 如果
,不能与之前的区间接上,则“另起炉灶”, 。 - 否则
保持原值不变。 - 用
更新 。
- 如果
- 否则区间不能包含
, 。
注意这里
所以我们要手动让
最后如果
代码
#include <cstdio>
#include <algorithm>
#define h(x) lower_bound(a + 1, a + m + 1, x) - a
using namespace std;
int T, n, m, k, s, l, r, x, y, a[200050], b[200050], c[200050];
int main()
{
scanf("%d", &T);
while(T--)
{
scanf("%d%d", &n, &k);s = -1;
for(int i = 1;i <= n;++i) scanf("%d", &a[i]), b[i] = a[i];
sort(a + 1, a + n + 1);m = unique(a + 1, a + n + 1) - a - 1;
for(int i = 1;i <= m;++i) c[i] = 0;
for(int i = 1;i <= n;++i) ++c[h(b[i])];a[0] = -1;
for(int i = 1;i <= m;++i)
if(c[i] >= k)
{
if((r = a[i]) != a[i - 1] + 1) l = a[i];
if(r - l > s) s = r - l, x = l, y = r;
}
else l = r = a[i + 1];
if(s == -1) puts("-1");
else printf("%d %d\n", x, y);
}
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工具