当前位置: 首页 > 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.jsqmd.com/news/47605/

相关文章:

  • 2025.11.18 写题记录
  • F032 材料科学文献知识图谱可视化分析架构(四种知识图谱可视化布局) | vue + flask + echarts + d3.js 建立
  • 2025年AI IDE的深度评测与推荐:从单一功能效率转向生态壁垒 - 教程
  • 2025年AI IDE的深度评测与推荐:从单一功能效率转向生态壁垒 - 教程
  • 2025 最新支架厂家排行榜,出口级品质 + 定制服务 工程采购优选推荐电缆沟/弧形电缆沟/隧道电缆/管廊电力/角钢电缆/热镀锌角钢电缆沟支架厂家
  • vue3 波纹效果
  • 2025 最新支架厂家排行榜,出口级品质 + 定制服务 工程采购优选推荐指南热浸锌电缆/可调节角度隧道电缆沟/定制电缆沟/热镀锌电缆沟支架公司推荐
  • gvim linux
  • JDK21升级
  • gun linux
  • 2025年上海泰迪熊狗护理渠道权威推荐榜单:约克夏狗/西高地幼犬/可卡布犬用品及宠物店服务供应商精选
  • 渲染相关(Markdown、ByteMD、ReactMarkdown) - 实践
  • 2025 最新套袋机厂家权威推荐榜:聚焦技术创新与专利优势,涵盖多类型设备优质品牌汇总自动套袋机/全自动套袋机/侧推式套袋机/卧式套袋机厂家推荐
  • 正宗粮食酒一箱6瓶哪个品牌好?2025品牌精选:品质与性价比的考量
  • 2025 最新推荐装盒机厂家权威排行榜:全自动 / 食品 / 纸巾 / 卫生巾装盒机技术创新与整线配套能力测评报告
  • NCHU_单部电梯调度程序大作业
  • 2025-11-22
  • 2025年好吃不贵的餐厅服务权威推荐榜单:宝藏餐厅/好吃的餐厅/口碑好的餐厅服务精选
  • 2025年郑州婚姻心理咨询公司权威推荐榜单:心理健康咨询/家庭心理咨询/心理咨询源头公司精选
  • grub命令行启动linux
  • gtk的linux
  • gui linux
  • 2025 年 11 月音响分频器,汽车音响分频器,喇叭分频器厂家最新推荐,产能、专利、环保三维数据透视!
  • 2025 年 11 月方形冷却塔,圆形冷却塔,横流冷却塔,逆流冷却塔厂家最新推荐,聚焦资质、案例、售后的五家机构深度解读!
  • 2025 最新分频器厂家权威排行榜:EMF 三维电感技术加持,国际协会认证品质之选音响分频器/汽车音响分频器/喇叭分频器公司推荐
  • vue前端面试题——记录一次面试当中遇到的题(10) - 详解
  • Grid-dp,交互
  • 2025 年 11 月工业冷却塔,闭式冷却塔,不锈钢冷却塔,商场冷却塔最新推荐,聚焦资质、案例、售后的五家机构深度解读!
  • 2025 年国内电容源头厂家最新推荐排行榜:聚焦核心技术与品质,五大实力品牌选购指南电解电容/薄膜电容公司推荐
  • HUST食堂解锁记录