260123A 供音树

news/2026/1/23 23:22:25/文章来源:https://www.cnblogs.com/CuteNess/p/19524248

给出两个长为 \(n\) 的数列 \(a_i,b_j\),对所有 \(1\le k\le n\) 计算

\[c_k=\max_{\gcd(i,j)=k}|a_i-b_j| \]

\[n\le 10^5 \]


省流:最值转判定转计数。

首先枚举绝对值内的符号做两遍,把绝对值拆掉。

考虑对于每个 \(k\) 保留原序列中所有 \(k\) 的倍数下标的位置,转化为对互质下标对最大化上式。

由于 \(\max\) 不具有可减性,因此不能直接上莫反。但是我们可以创造出一个可减性。

考虑二分答案。转化为对 \(a_i-b_j\ge w\) 的互质对 \((i,j)\) 计数。此时方案数就具有可减性。

我们在这里上莫反。我们希望一对 \((i,j)\) 在每一个 \(d|i,d|j\) 上贡献一次 \(\mu(d)\)

所以我们枚举 \(d\),将所有 \(d\) 的倍数下标的位置上的 \(a,b\) 分别排序,双指针维护贡献对数即可。

时间复杂度 \(\mathcal O(n\ln^2n\log V)\)


code
#include <algorithm>
#include <iostream>
#include <bitset>const int N = 1e5 + 7;
#define rep(i,a,b) for(int i(a);i<=(b);++i)
typedef long long i64;int mu[N];
std::bitset<N> ip;
std::basic_string<int> pr;
void prime() {mu[1] = 1;for(int i = 2; i < N; ++i) {if(!ip[i]) pr += i, mu[i] = -1;for(int& p: pr) {if(i * p >= N) break;ip[i * p] = 1;if(i % p == 0) break;mu[i * p] = -mu[i];}}
}
int n, a[N], b[N], wa[N], wb[N], m;
std::basic_string<int> ga[N], gb[N];
inline int solve() {for(int i = 1; i <= m; ++i)ga[i].clear(), gb[i].clear();for(int i = 1; i <= m; ++i) {if(!mu[i]) continue;for(int j = i; j <= m; j += i)ga[i] += wa[j], gb[i] += wb[j];std::sort(ga[i].begin(), ga[i].end());std::sort(gb[i].begin(), gb[i].end());}auto check = [](int w) {i64 res = 0;for(int i = 1; i <= m; ++i) {if(!mu[i]) continue;i64 T = 0;auto &gA = ga[i], &gB = gb[i];for(int i = 0, j = 0; i < (int)gA.size(); ++i) {while(j < (int)gB.size() && gB[j] <= gA[i] - w) ++j;T += j;}for(int i = 0, j = 0; i < (int)gB.size(); ++i) {while(j < (int)gA.size() && gA[j] <= gB[i] - w) ++j;T += j;}res += mu[i] * T;}return res;};int l = 0, r = 1e9 + 1;while(r - l > 1) {int m = (l + r) >> 1;if(check(m) > 0) l = m;else r = m;}return l;
}int main() {std::ios::sync_with_stdio(0), std::cin.tie(0), std::cout.tie(0);prime(), std::cin >> n;rep(i, 1, n) std::cin >> a[i];rep(i, 1, n) std::cin >> b[i];rep(i, 1, n) {m = 0;for(int j = i; j <= n; j += i)++m, wa[m] = a[j], wb[m] = b[j];std::cout << solve() << ' ';}std::cout << "\n";
}

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

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

相关文章

Java计算机毕设之基于Java的在线教育平台基于Spring Boot+vue的线上教学平台(完整前后端代码+说明文档+LW,调试定制等)

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

12306 购票辅助工具:余票监控提醒 + 候补自动提交(支持 Windows)

每到节假日或热门时段&#xff0c;12306 官方放票时间不固定&#xff0c;热门车次往往很快售罄&#xff0c;很多用户需要反复刷新页面&#xff0c;依然难以成功购票。 本文整理一款适用于 Windows 系统的 12306 购票辅助工具&#xff0c;通过 余票监控、候补提醒、自动填写购票…

人群仿真软件:SimWalk_(6).建筑环境建模

建筑环境建模 在人群仿真软件中&#xff0c;建筑环境建模是至关重要的一步。建筑环境的精准建模不仅能够提高仿真结果的可靠性&#xff0c;还能为后续的人群行为分析提供基础。本节将详细介绍如何在SimWalk中进行建筑环境建模&#xff0c;包括建模的基本步骤、关键参数的设置以…

人群仿真软件:SimWalk_(6).人群流特性及参数设置

人群流特性及参数设置 在人群仿真软件中&#xff0c;人群流特性及参数设置是至关重要的环节。这些参数不仅影响仿真结果的准确性&#xff0c;还决定了仿真场景的逼真度。本节将详细介绍如何在SimWalk中设置和调整人群流特性&#xff0c;包括行人的行走速度、密度、行为模式等&a…

人群仿真软件:SimWalk_(7).动态仿真过程控制与监视

动态仿真过程控制与监视 在人群仿真软件中&#xff0c;动态仿真过程的控制与监视是确保仿真结果准确性和有效性的关键环节。本节将详细介绍如何在人群中实现动态仿真的过程控制与监视&#xff0c;包括数据采集、仿真参数调整、实时监视和结果分析等方面的内容。我们将通过具体的…

人群仿真软件:SimWalk_(4).用户界面操作与基本功能介绍

用户界面操作与基本功能介绍 在进行人群仿真软件的二次开发之前&#xff0c;首先需要熟悉软件的用户界面和基本功能。SimWalk 提供了一个直观且功能强大的用户界面&#xff0c;使得用户可以轻松地创建、编辑和运行仿真场景。本节将详细介绍如何操作用户界面以及一些基本功能的…

Java毕设项目推荐-基于协同过滤算法的音乐推荐系统基于springboot的个性化音乐推荐系统【附源码+文档,调试定制服务】

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

Qt常用控件指南(2)

目录QWidget窗口属性深度解析&#xff1a;几何布局、资源管理与视觉特效一、 窗口几何信息与Frame机制1. 几何属性的概念差异2. 构造函数中的数据获取陷阱3. 正确的获取时机二、 窗口标题&#xff08;WindowTitle&#xff09;的层级限制三、 窗口图标与Qt资源系统&#xff08;Q…

奇技淫巧之花里胡哨的VIM---插件的添加与美化

奇技淫巧之花里胡哨的VIM—插件的添加与美化 一、前期准备工作 1.VIM版本要为9.0以上&#xff0c;自行检查&#xff0c;如果不是的话&#xff0c;使用PPA安装 sudo add-apt-repository ppa:jonathonf/vim sudo apt update#Ubuntu发行版会自动更新&#xff0c;不需要手动 sudo…

Java毕设项目推荐-基于Vue/SpringBoot的社区智慧医疗服务管理系统【附源码+文档,调试定制服务】

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

2026年小程序商城原来可以这样0代码搞定!

嗨,朋友们,我是专注小程序领域8年的老陈。过去几年,我经手过上百个小程序项目,也见证了开发方式从“纯代码硬扛”到“0代码工具化”的变迁。据《2025年中国小程序生态发展报告》数据显示,超过67%的中小企业已采用…

Java毕设项目推荐-基于SpringBoot+Vue的在线教育平台基于springboot的在线学习平台在线教育平台【附源码+文档,调试定制服务】

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

人群仿真软件:Pathfinder_(14).行业应用与案例研究

行业应用与案例研究 在人群仿真软件的二次开发中&#xff0c;了解软件如何应用于不同行业是至关重要的。本节将详细介绍Pathfinder在各种实际场景中的应用案例&#xff0c;包括但不限于建筑安全、交通运输、大型活动管理等。我们将通过具体的案例分析&#xff0c;探讨如何利用P…

2024年提示工程架构师领域发展预测:挖掘行业潜力

2024年提示工程架构师领域发展预测&#xff1a;从Prompt工匠到系统级智能设计的跃迁 元数据框架 标题 2024年提示工程架构师领域发展预测&#xff1a;从Prompt工匠到系统级智能设计的跃迁 关键词 提示工程架构师、大模型Agent、多模态提示设计、工具链整合、伦理对齐、行业垂直…

Linux --- tar命令常见用法

Linux tar 命令1.分卷压缩与解压 Linux 下最通用的分卷压缩方式是结合 tar&#xff08;打包/压缩&#xff09;与 split&#xff08;切割&#xff09;命令使用管道流处理。 1.1 分卷压缩 将目录打包并分割成指定大小的多个文件。 # 语法 tar -czvf - <要打包的目录> | spl…

CentOS7更换为阿里源

在 CentOS 7 中将默认的官方 YUM 源更换为 阿里云镜像源&#xff08;Alibaba Cloud Mirror&#xff09;&#xff0c;可以显著提升软件包下载速度&#xff08;尤其在中国大陆&#xff09;。以下是详细操作步骤&#xff1a; ✅ 前提条件 你已能以 root 用户 身份操作&#xff08…

人群仿真软件:Pathfinder_(14).与其他软件的集成与互操作

与其他软件的集成与互操作 在人群仿真软件的二次开发中&#xff0c;与其他软件的集成和互操作是实现更复杂、更全面仿真的关键步骤。无论是数据交换、模型共享还是功能扩展&#xff0c;集成其他软件可以显著提升仿真的准确性和实用性。本节将详细介绍如何在Pathfinder中实现与其…

Java毕设项目推荐-基于SpringBoot的电竞赛事管理系统的设计与实现基于springboot的电竞赛事中心设计系统【附源码+文档,调试定制服务】

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

【Redis基础入门篇2】Redis 5 种基础数据结构,这篇讲得明明白白

&#x1f4bb; Hello World, 我是 予枫。代码不止&#xff0c;折腾不息。作为一个正在升级打怪的 Java 后端练习生&#xff0c;我喜欢把踩过的坑和学到的招式记录下来。 保持空杯心态&#xff0c;让我们开始今天的技术分享。Redis 作为一款高性能的内存数据库&#xff0c;其核心…