尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

CF 359D. Pair of Numbers

CF 359D. Pair of Numbers
📅 发布时间:2026/6/20 15:10:41

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;
}

相关新闻

  • 2025多校CSP模拟赛6
  • Java基础——类型转换,变量、常亮、作用域,基本运算符
  • 洛谷 LGR-246 S 模拟赛

最新新闻

  • 2026年热门的公司注册/海口贸易公司注册/海口科技公司注册实力推荐 - 品牌宣传支持者
  • 2026年知名的江苏DM542型电机驱动器/无刷电机驱动器/江苏BLD300型电机驱动器/江苏无刷电机驱动器定制加工厂家推荐 - 行业平台推荐
  • 后端开发新趋势:探索前沿技术栈的融合应用
  • 2026新余漏水检测维修本地口碑防水商家榜单:厨卫/阳台/屋面/地下室渗漏水维修,持证施工+明码实价,防水补漏公司TOP5推荐 - 即刻修防水
  • 基于分层智能体架构的AI模型自动化构建系统设计与实践
  • 2026新乡漏水检测维修本地口碑防水商家榜单:厨卫/阳台/屋面/地下室渗漏水维修,持证施工+明码实价,防水补漏公司TOP5推荐 - 即刻修防水

日新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号