当前位置: 首页 > news >正文

CF359D-Pair of Numbers

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;
}
http://www.rkmt.cn/news/57346.html

相关文章:

  • 2025 最新支架厂家排行榜,出口级品质 + 定制服务 工程采购优选推荐电缆沟/弧形电缆沟/隧道电缆/管廊电力/角钢电缆/热镀锌角钢电缆沟支架厂家
  • 2025年AI IDE的深度评测与推荐:从单一功能效率转向生态壁垒 - 教程
  • vue3 波纹效果
  • gun linux
  • 2025年上海泰迪熊狗护理渠道权威推荐榜单:约克夏狗/西高地幼犬/可卡布犬用品及宠物店服务供应商精选
  • NCHU_单部电梯调度程序大作业
  • 2025-11-22
  • Grid-dp,交互
  • 2025 年国内电容源头厂家最新推荐排行榜:聚焦核心技术与品质,五大实力品牌选购指南电解电容/薄膜电容公司推荐
  • 初一上册CSP-J和期中考试反思
  • modbus(二)用NModbus4库实现Modbus tcp从站
  • 计算机字长与字节大小的发展历程
  • 2025年快递纸箱定做厂家权威推荐榜单:五层纸箱/重型纸箱/单层纸板箱源头厂家精选
  • 2025年镀锌角码实力厂家权威推荐榜单:万能立柱角码/角码连接件/钢结构预埋件源头厂家精选
  • Nmap 命令详细使用指南(官方参数全覆盖版) - 实践
  • selenium: 安装selenium
  • 基于单片机的故障检测自动保护智能防夹自动门设计及LCD状态显示架构
  • gpt安装 linux
  • GRANT语句在MySQL中的权限继承策略
  • 轨道平面系与轨道姿态系 - 实践
  • 51单片机(markdown格式阅读) - 实践
  • 【日记】博客爆炸了(1009 字)
  • 解决:部署mabayolo模型cd selective_scan pip install . cd ..报错 以及 torch.cuda.is_available()结果False
  • CMake构建学习笔记30-Ceres Solver库的构建
  • curl 命令使用笔记
  • 2025年口碑好的电厂清淤机器人厂家最新用户好评榜
  • 2025年靠谱的极低压抗污染反渗透膜厂家最新TOP排行榜
  • 2025年11月留学生回国求职机构推荐榜单:权威机构列表与选择指南
  • 2025年11月留学生回国求职机构推荐:五大权威机构榜单与选择指南
  • 2025年评价高的快速离心浓缩干燥器TOP品牌厂家排行榜