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

CF359D-Pair of Numbers

CF359D-Pair of Numbers
📅 发布时间:2026/6/19 12:25:31

CF359D-Pair of Numbers

题目大意

你有一个数组 \(a\) ,包含 \(n\) 个数字。你要找到一对整数对,使得

· 存在整数 \(j\) ,\((l \le j \le r),\) \(a_l,…,a_r\)

· 值 \(r-l\) 取到最大值

找出所有对应 \(r-l\) 最大值的 \(l\) 位置。

\(Hint\)

考虑怎样的区间 \([l,r]\) 能满足上述条件。不难发现是 区间 \(gcd\) 等于 区间 \(min\) 。

题解

对于 \(r-l\) 的值,考虑二分答案。

接下来对于每一个 \(i\) ,判断其 \([i,i+r-l]\) 区间 \(gcd\) 等于 区间 \(min\) 。用 \(st\) 表维护静态区间 \(gcd\) 和 \(min\)。记录满足条件的位置。

#include<bits/stdc++.h>
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define umap unordered_map
#define endl '\n'
using namespace std;
using i128 = __int128;
const int mod =1e9+7;
template <typename T>void read(T&x){x=0;int f = 1;char c=getchar();for(;!isdigit(c);c=getchar())if(c=='-')f=-1;for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+(c^48);x*=f;
}
template <typename T>void print(T x) {if (x < 0) { putchar('-'); x = -x; }if (x > 9) print(x / 10);putchar(x % 10 + '0');
}
#define int long long
const int maxn=3e5+10;
int a[maxn],dp[maxn][22],dpgcd[maxn][22];
void stmin(int n)
{for (int i=1;i<=n;i++)dp[i][0]=a[i];for (int j=1;j<=21;j++)for (int i=1;i+(1<<j)-1<=n;i++)dp[i][j]=min(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);	
}
int querymin(int l,int r)
{int k=log2(r-l+1);return min(dp[l][k],dp[r-(1<<k)+1][k]);
}void stgcd(int n)
{for (int i=1;i<=n;i++)dpgcd[i][0]=a[i];for (int j=1;j<=21;j++)for (int i=1;i+(1<<j)-1<=n;i++)dpgcd[i][j]=gcd(dpgcd[i][j-1],dpgcd[i+(1<<(j-1))][j-1]);	
}
int querygcd(int l,int r)
{int k=log2(r-l+1);return gcd(dpgcd[l][k],dpgcd[r-(1<<k)+1][k]);
}
const int N=500005;
const int M=2000005;
inline void solve()
{vector<int> ans;int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}stmin(n);stgcd(n);int l=0,r=n;while(l<r){vector<int> temp;int mid=l+r+1>>1;for(int i=1;i+mid<=n;i++){if(querymin(i,i+mid)==querygcd(i,i+mid)){temp.push_back(i);}}if(temp.size()==0){r=mid-1;}else{l=mid;ans=temp;}}if(l==0){cout<<n<<" "<<0<<endl;for(int i=1;i<=n;i++) cout<<i<<" ";return;}cout<<ans.size()<<" "<<l<<endl;for(int i=0;i<ans.size();i++){cout<<ans[i]<<" ";}cout<<endl;
}signed main()
{
//	ios;int T=1;
//	cin>>T;for(;T--;) solve();return 0;
}

相关新闻

  • 2025 最新支架厂家排行榜,出口级品质 + 定制服务 工程采购优选推荐电缆沟/弧形电缆沟/隧道电缆/管廊电力/角钢电缆/热镀锌角钢电缆沟支架厂家
  • 2025年AI IDE的深度评测与推荐:从单一功能效率转向生态壁垒 - 教程
  • vue3 波纹效果

最新新闻

  • 重庆壹创新材料有限公司:专业珍珠棉包装材料厂家,隔音/加厚/易碎品保护优选 - 品牌推荐官
  • 后量子密码跨平台集成实战:兼容性挑战与工程解决方案
  • 构建后端纵深安全防线:从WAF、Nginx加固到DevSecOps实践
  • 宁波佳利达汽配抽油器系列推荐:抽油泵/电动抽油筒/手动抽油器专业制造 - 品牌推荐官
  • 2026日喀则卫生间免砸砖防水、楼顶漏水、外墙渗水、地下室阳光房渗漏;正规防水补漏公司免费上门,线上质保,售后无忧。房屋漏水不再愁,24小时一站式快速维修。 - 企业资讯
  • MC68020协处理器接口:CIR寄存器与响应原语机制详解

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

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

关于尧图

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

服务项目

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

快速链接

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

联系方式

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

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