CF1641A 题解
题目大意
给定一个长度为 的序列 和一个数字 。
你需要在序列 后面加上一些元素,然后对整个序列重新排序,使得对于 内的任意奇数 都有 。
数据范围:。
题目解析
考虑贪心。
首先把整个序列按升序排序。
然后从头到尾扫一次,如果 存在,那么就把它删掉,否则就在序列里加入这个数字(也就是答案加一)。
我们发现需要使用哈希或者是平衡树来维护,这样就可以做到 或者是 。
这里用 set
来维护。
我们发现 ,也就是说 ,会爆 int
,所以一定要开 long long
。听说 Div 2 一堆人因为没开 FST 了。
核心代码:
struct JTZ{ ll x; int num; bool operator < (const JTZ x) const { if(this->x==x.x) return this->num < x.num; return this->x < x.x; } }; set<JTZ> s,E; int n,flag[maxn]; ll x,a[maxn]; void work(){ s=E; n=read(); x=read(); int i,ans=0; for(i=1;i<=n;i++) a[i]=read(); sort(a+1,a+n+1); for(i=1;i<=n;i++) s.insert((JTZ){a[i],i}),flag[i]=1; for(i=1;i<=n;i++) if(flag[i]){ flag[i]=0; s.erase((JTZ){a[i],i}); set<JTZ>::iterator tmp=s.lower_bound((JTZ){a[i]*x,i}); if((*tmp).x==a[i]*x) flag[(*tmp).num]=0,s.erase(tmp); else ans++; } print(ans),pc('\n'); return; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具