【ST表+二分】codeforces 359 D. Pair of Numbers

news/2026/1/24 16:38:09/文章来源:https://www.cnblogs.com/RomanLin/p/19504017

View Post

【ST表+二分】codeforces 359 D. Pair of Numbers

题目

https://codeforces.com/problemset/problem/359/D

题解

假设数组 \(a =\) {\(a_1,a_2,...,a_l,...,a_i,...,a_r,...,a_n\)},且 \(a_l, a_{l+1}, ..., a_r(l \leq a_i \leq r)\) 每个数都满足能被 \(a_i\) 整除,那么 \(gcd(a_l,a_{l+1},...a_i,...,a_r) = a_i\) 成立。

核心思路:

  1. 先用 ST 表预处理出所有(静态)区间 gcd
  2. 在第 1 步的基础上,遍历数组 \(a\)枚举以 \(a_i\) 为最大公因数的区间,使用二分法维护出区间的左右端点;
  3. 在第 2 步维护出所有区间的基础上,维护出区间最大长度,然后筛选出长度为最大长度的所有区间即可。

参考代码

#include<iostream>
#include<vector>
#include<queue>
#include<cmath>using ll = long long;template<typename T, typename E, typename F>
class SparseTable {/*稀疏表*/
private:std::vector<std::vector<E>> dp;F func;
public:SparseTable(T& arr, int arr_size, F func): func(func) {int log2_arr_size = log2(arr_size) + 1;dp.assign(arr_size, std::vector<E>(log2_arr_size));for (int i = 0; i < arr_size; ++ i) dp[i][0] = arr[i];// 初始化第一层for (int j = 1; j < log2_arr_size; ++ j) {// 枚举区间长度 2^jint step = 1 << j;// 区间长度for (int i = 0; i + step - 1 < arr_size; ++ i) {// 枚举区间起点dp[i][j] = func(dp[i][j - 1], dp[i + (1 << (j - 1))][j - 1]);}}}E query(int l, int r) {// 下标从 0 开始int k = log2(r - l + 1);return func(dp[l][k], dp[r - (1 << k) + 1][k]);}
};int gcd(int a, int b) {return !b ? a : gcd(b, a % b);
}int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);int n, dis = 0;std::cin >> n;std::vector<int> a(n);std::queue<ll> que;for (int i = 0; i < n; ++ i) std::cin >> a[i];SparseTable<std::vector<int>, int, decltype(&gcd)> st(a, n, gcd);for (int i = 0; i < n; ++ i) {int le = 0, ri = i, md, l, r;while (le < ri) {md = le + ri >> 1;if (a[i] == st.query(md, i)) ri = md;else le = md + 1;}l = le, le = i, ri = n - 1;while (le < ri) {md = le + ri + 1 >> 1;if (a[i] == st.query(i, md)) le = md;else ri = md - 1;}r = le;if (r - l > dis) {que = std::queue<ll>();que.push(1LL * r * n + l);dis = r - l;} else if (que.empty() || r - l == dis && 1LL * r * n + l != que.back()) que.push(1LL * r * n + l);}std::cout << que.size() << ' ' << dis << '\n';while (!que.empty()) {std::cout << (que.front() % n + 1) << ' ';que.pop();}return 0;
}

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

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

相关文章

Mac系统安装nvm

1.安装Homebrew https://brew.idayer.com 打开终端运行 /bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)"2.安装nvm:安装成功Homebrew brew install nvm在ho…

2026年武汉螺纹钢/线材/板材/管材源头厂家选购推荐:湖北鑫永盛钢铁贸易有限公司

一、行业背景与市场趋势:迎接新周期的价值之选 随着武汉作为国家中心城市与长江经济带核心城市的建设步入纵深阶段,以及“武汉新城”等重大规划的持续推进,本地建筑用钢市场正经历从“量”到“质”的深刻变革。2025…

香橙派安装ch340驱动

香橙派安装ch340驱动基本信息 主机:Orangepi5max 16G (ARM64 架构) + 64G tf卡 安装步骤 下载包 解压到桌面,文件夹ch341ser_linux-main 检查环境 打开终端 确认当前内核版本 uname -r一般打印信息为5.10.160-rock…

冲刺Day3

Scrum 冲刺博客 Day3 1. 今日站立式会议参会人:何俊朗 会议纪要:同步前端体验优化范围,确认验收口径(上传/预览、状态提示、表单校验、空态/加载态) 照片:线上会议无照片2. 昨天已完成的工作成员:何俊朗 完成事…

实用指南:四旋翼无人机PID控制仿真模型探索

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

枚举中间

lc lc2964 枚举中间hash class Solution { public: int divisibleTripletCount(vector<int>& nums, int d) { int n nums.size(); if (n < 3) return 0; int ret 0; unordered_map<int, int> hash; hash[nums[0] % d]; // 枚举中间 for (int i 1; i &l…

2026网络空间安全专业就业前景(非常详细)零基础入门到精通,收藏这篇就够了

此前&#xff0c;教育部网站发布《2024年度普通高等学校本科专业申报材料公示》&#xff0c;根据公示统计2024年度拟新增专业535个&#xff0c;涉及353所高校。 其中&#xff0c;申报数量TOP2专业是网络空间安全&#xff08;37个&#xff09;。截至2024年6月&#xff0c;我国已…

高空作业机器人设计

第2章 总体方案确定 2.1 齿轮齿条绕线机构 现有使用较广泛的绕线装置是较大型的绕线机。绕线机&#xff0c;顾名思义是把线状的物体缠绕到特定的工件上的机器。欧美绕线机以其加工精度高、质量稳定而在国际绕线机市场上占有重要地位。 欧美绕线机一般可绕0.01~2mm的线径&#x…

机械手机器人

第二章 加工中心—刀库 2.1 刀库的分类 近年来刀库的发展已超越其为工具机配件的角色&#xff0c;在其特有的技术领域中发展出符合工具机高精度、高效能、高可靠度及多工复合等概念之产品。其产品品质的优劣&#xff0c;关系到工具机的整体效能表现。 刀库的容量、布局&#xf…

权威测评出炉!2026 雅思网课课程 TOP5 实战提分机构口碑排行推荐

本次测评由教育部留学服务中心备案团队联合雅思官方认证考官组牵头,依据《雅思培训服务质量评估规范(2026版)》,覆盖60个城市200个区县,结合30000+考生及家长实测反馈、220家雅思教育机构全维度考核,形成这份兼具…

AI写毕业论文工具推荐:7款神器10分钟生成万字问卷类论文+自动生成高信度数据,论文写作超高效!

大学生、研究生等写论文常遇选题、数据收集等难题,本文深度测评7款AI论文工具,重点解析「AI论文智作」全流程。该工具可30分钟生成5万字初稿,能拆解导师反馈、降重控AI率、自动生成图表公式代码及规范引用,还提供步…

应用安全 --- 安卓加固 之 梆企加固

应用安全 --- 安卓加固 之 梆企加固https://dev.bangcle.com/home/introduction 特征 壳入口

ACPIBuildProcessRunMethodPhaseCheckBridge函数根据deviceExtension->Flags设置Device (PE83)下一个状态为WORK_DONE_CO

ACPIBuildProcessRunMethodPhaseCheckBridge函数根据deviceExtension->Flags设置Device (PE83)下一个状态为WORK_DONE_COMPLETE 不会运行ACPI!ACPIBuildProcessRunMethodPhaseRecurse检查子节点了 dsdt.dsl:14398: Device (PE83) dsdt.dsl:14447: …

Java毕设选题推荐:基于Spring Boot的家庭绿植养护系统设计与实现基于springboot的植物养护系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

Java毕设项目:基于springboot的智慧生产安全系统(源码+文档,讲解、调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【毕业设计】基于springboot的智慧生产安全系统(源码+文档+远程调试,全bao定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

雅思备考避坑指南:破解选课难题,高性价比提分机构全解析

当前雅思培训行业乱象丛生,在北京朝阳区、上海徐汇区、广州天河区、深圳南山区、成都锦江区等全国多区县,无数雅思考生深陷选课难、找不到靠谱教育机构、提分缓慢、缺乏个性化备考方案的困境。想找到优质、高性价比的…

英国展台搭建口碑之选:2026年这些公司受青睐,展览/展览设计/展会搭建/展台设计/展馆设计,展台搭建公司口碑排行

在全球会展行业加速复苏的背景下,英国作为欧洲核心展览市场,对展台搭建服务的需求持续攀升。企业选择展台服务商时,不仅需考量设计创意、执行效率,更需关注其全球化服务能力与行业资质。本评测基于服务网络覆盖度、…

实用指南:HTML常用行内标签

实用指南:HTML常用行内标签pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco",…

学雅思哪家培训机构最好?2026全国雅思机构口碑排名TOP5 深度测评

雅思考试是全球认可的英语语言能力测试,是学子留学深造、职场晋升的核心门槛,选择靠谱优质的雅思培训机构,更是高效提分的关键。结合权威行业数据及全国多省市区县考生反馈,无论是北京朝阳区、上海静安区、广州天河…