CF 359D. Pair of Numbers

news/2025/10/18 19:52:49/文章来源:https://www.cnblogs.com/usedchang/p/19150095

D.Pair of Numbers


原题链接

题意简述

西蒙有一个数组 \(a_1, a_2, ..., a_n\) ,由 n 个正整数组成。今天,西蒙要求你找出一对整数 $l, r (1 \leq l \leq r \leq n) $,使得下列条件成立:
有整数 \(j ( l \leq j \leq r )\),使得所有整数 \(a_l, a_{l + 1}, ..., a_r\) 都能被 aj 整除;
值$ r - l $在条件 1 为真的所有数对中取最大值;
帮助西蒙,找出所需的一对数 \((l, r)\) 。如果有多个所需的数对,请找出所有数对

解题思路

满足一个数能被所有数整除,那么这个数一定是这些数的公因数,同时满足 \(\gcd_{i=l}^r a_i= \min_{i=l}^r a_i\),观察发现
1.对于包含某个数的区间连续gcd后等于这个数,这样的区间大小满足单调性
2.如果贪心的枚举每个作为区间左端点,那么 二分复杂度时\(\mathcal{O}(n \times n\times \log n)\)的,所以我们要设法加速某个过程.
3.对于区间连续gcd操作,考虑使用朴素线段树或st表维护,使得查询从 \(\mathcal{O}(n)\) 降为 \(\mathcal{O}(n)\)
总体复杂度 \(\mathcal{O}(n \times \log n\times \log n)\)

AC code(st 表)

//Stop learning useless algorithms, go and solve some problems, learn how to use binary search.
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
#define dbg(...) cout<<"usedchang"<<endl
struct ST_gcd{vector< vector<ll> >a;int n,len;ST_gcd(int n,vector<ll>&v):n(n),len(__lg(n)){a=vector<vector<ll>>(len+1,vector<ll>(n+1));build(v);}void build(vector<ll>&v){for(int i=1;i<=n;i++) a[0][i]=v[i];for(int i=1;i<=len;i++){for(int j=1;j<=n-(1<<i)+1;j++){a[i][j]=gcd(a[i-1][j],a[i-1][j+(1<<i-1)]);}}}ll qry(int l,int r){int len=__lg(r-l+1);return gcd(a[len][l],a[len][r-(1<<len)+1]);}
};
void solve(){int n;cin>>n;vector<ll>a(n+1);for(int i=1;i<=n;i++) cin>>a[i];ST_gcd G(n,a);auto isok=[&](int op,int l,int r) ->bool {if(op==1) return G.qry(l,r)==a[l];return G.qry(l,r)==a[r];};int maxl=0;vector< pair<int,int> >ans;for(int i=1;i<=n;i++){int l=i,r=n;while(l<=r){int mid=l+r>>1;if(isok(1,i,mid)) l=mid+1;else r=mid-1;}int R=l-1;l=1,r=i;while(l<=r){int mid=l+r>>1;if(isok(2,mid,i)) r=mid-1;else l=mid+1;}int L=l;if(R-L>=maxl){maxl=R-L;ans.push_back({L,maxl});}i=R;}vector<int>res;for(int i=0;i<ans.size();i++){if(ans[i].second==maxl) res.push_back(ans[i].first);}cout<<res.size()<<' '<<maxl<<endl;for(auto &p:res) cout<<p<<' ';cout<<endl; 
}
int main(){cin.tie(0)->ios::sync_with_stdio(false);solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/939744.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025多校CSP模拟赛6

T1:最长不下降子序列 (sequence) 思路: 依据做传统最长不下降子序列的的经验,这题用 \(dp\) 。 因为 \(a\) 的值只有 \(1,2\) ,并且翻转操作只进行一次,所以我们考虑什么样的情况一次翻转能产生最长不下降子序列呢…

Java基础——类型转换,变量、常亮、作用域,基本运算符

Java基础——类型转换,变量、常亮、作用域,基本运算符类型转换 从低到高--------------> byte,short,char-->int-->long-->float-->double (小数优先级高于整数) 运算过程中需要将不同类型的值转换…

洛谷 LGR-246 S 模拟赛

100 + 0 + 44 + 24 = 168, Rank 469/3708.下次再也不在过掉了一个题的情况下试图去想第二个题的正解了 /ll【LGR-246】SCP 2025 第二轮(复赛 S 组)模拟 链接:link 题解:题目题解区内 时间:4h (2025.10.18 14:30~1…

godot3D节点本身的偏转数值错误竟会导致空间移动穿模??!

在Godot引擎中,当RigidBody3D节点被施加一个异常扭矩值apply_torque((-inf,inf,-inf))时,即使不会导致物体实际旋转,也会引发异常物理行为:物体在空间线性力或自由落体作用下会匀速穿模。测试表明,RigidBody3D的姿…

Kafka面试精讲 Day 24:Spring Kafka构建实战

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

重新安装trea cn

重新安装trea cnhttps://blog.csdn.net/weixin_45417754/article/details/149644689

题解:qoj7938 Graph Race

简单题。 题意:给出一张图,边权为 \(1\),每个点有属性 \(a,b\),定义一个点 \(u\) 的权值 \(f(u)\) 为 \(\max _{u\not=v}a_v-b_v\operatorname{dis}(u,v)\),按从小到大的顺序输出与 \(1\) 相连的的点的 \(f\) 值。…

java中的初等函数

java中的初等函数一、函数 基本初等函数:基本初等函数是指常值函数、幂函数、指数函数,对数函数、三角函数、反三角函数这六类函数。 初等函数:将由基本初等函数经过有限次加、减、乘、除四则运算和有限次复合运算所…

【机器人】SG-Nav 分层思维链H-CoT | 在线分层3D场景图 | 目标导航 - 教程

【机器人】SG-Nav 分层思维链H-CoT | 在线分层3D场景图 | 目标导航 - 教程2025-10-18 19:28 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: …

Dr. Jane Goodall

Dr. Jane Goodallwhen I was in gomi particularly I felt very very close to a great spiritual [Music] power if we think of the Bible it would be in which we live and move and have our being and I felt th…

专用硬件神经网络优化技术解析

本文深入探讨了针对专用硬件优化神经网络架构的技术方案,通过优化搜索空间设计和结合专家经验,在多个实际应用中实现了高达55%的延迟降低,涵盖了检测模型、分类模型和语义分割等具体应用场景。专用硬件神经网络优化…

学习逆向的背景知识(自用)

学习逆向的背景知识(自用) 常见的寄存器指令指针(程序计数器) IP EIP RIP 寄存下一个指令的地址通用寄存器:累加器寄存器 EAX RAX 寄存算术运算结果基址寄存器 EBX RBX 寄存引用偏移量的基址…

Linux-网络安全私房菜(二)

Linux-网络安全私房菜(二)目录防火墙防火墙简单操作iptablestips建议系统资源篇章理解数据流输出重定向stress压力测试命令free命令netstat命令ss命令软件包篇章rpm包管理dpkg包管理磁盘篇章MBRfdiskGPT(GUID)gdiskpar…

pycharm使用远程的ssh的解释器

今天使用了远程ssh的解释器1.使用 专业版本的pycharm 2. 3. 解释器使用 .conda/envs/.../lth/python.exe 4. 5. 如果你有一些数据集也在这附近,需要把数据集 exclude掉 总的来说, 这么做就够了。 可惜我老师只有…

Android SSL Pinning检测利器:SSLPinDetect技术解析

本文详细介绍了SSLPinDetect工具的技术原理和实现,这是一个用于Android应用安全分析的SSL Pinning检测工具,通过多线程扫描、内存映射读取和预编译正则表达式等技术,实现高效的静态代码分析。SSLPinDetect:Android…

AI元人文:社区调解的数字剧场

AI元人文:社区调解的数字剧场 在AI元人文的视野下,社区调解经历了一场深刻的范式转变——从对错的裁判转变为多方价值诉求在特定情境舞台上的创造性对话。这不仅是方法的升级,更是对调解本质的重新定义。 一、从对抗…

2025年粉末冶金制品/零件厂家推荐排行榜,专业制造与高品质服务的首选!

2025年粉末冶金制品/零件厂家推荐排行榜,专业制造与高品质服务的首选!随着工业技术的不断进步和市场需求的多样化,粉末冶金制品及零件在各个领域的应用越来越广泛。为了帮助采购决策者筛选出优质的粉末冶金制品及零…

详细介绍:【探寻C++之旅】第十六章:unordered系列的认识与模拟实现

详细介绍:【探寻C++之旅】第十六章:unordered系列的认识与模拟实现pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &qu…

Dubbo入门-Dubbo的快速使用

什么是Dubbo Dubbo是一个分布式、高性能、透明化的RPC服务框架。 提供服务自动注册、自动发现等高效的服务治理方案,可以和Spring框架无缝集成。 Dubbo中服务端最核心的对象:ApplicationConfig:配置当前应用信息 Pr…

15 接口的介绍

15 接口的介绍接口 专业的抽象 定义 只有规范,自己无法写方法 规范的含义是,定义规则,即‘若,则’这类规范。 如:如果你是老师,则你要具备教学生的能力。 使用 public interface Name1{//接口中的所有定义都是抽…