!-- Loading 底层遮罩 -->

P3143 钻石收藏家

感谢所有AC

 

传送门

思路

       题目需要求出两段不重合的序列使两段长度和最大。代码关键在于循环变量作为左指针,左右指针之间维护的是第二个序列,而第一个序列在左右指针向前推进的过程中其最大长度被保存下来了。

代码

#include<iostream> #include<algorithm> #define MAXN 50007 using namespace std; int n, pre, len[MAXN], Dio[MAXN], ans, r = 2, k; int main(void) { cin >> n >> k; for (int i = 1; i <= n; i++) cin >> Dio[i]; sort(Dio + 1, Dio + n + 1); for (int l = 1; l <= n; l++) { while (Dio[r] <= Dio[l] + k && r < n + 1) r++; len[r] = max(r - l, len[r]); pre = max(pre, len[l]); ans = max(pre + r - l, ans); } cout << ans; return 0; }

 


__EOF__

本文作者星晴
本文链接https://www.cnblogs.com/xqk0225/p/16079350.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Thinker-X  阅读(36)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示