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

260123A 供音树

给出两个长为 \(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.jsqmd.com/news/290650/

相关文章:

  • Java计算机毕设之基于Java的在线教育平台基于Spring Boot+vue的线上教学平台(完整前后端代码+说明文档+LW,调试定制等)
  • 12306 购票辅助工具:余票监控提醒 + 候补自动提交(支持 Windows)
  • 人群仿真软件:SimWalk_(6).建筑环境建模
  • 人群仿真软件:SimWalk_(6).人群流特性及参数设置
  • 人群仿真软件:SimWalk_(7).动态仿真过程控制与监视
  • 人群仿真软件:SimWalk_(4).用户界面操作与基本功能介绍
  • RHCSA
  • Java毕设项目推荐-基于协同过滤算法的音乐推荐系统基于springboot的个性化音乐推荐系统【附源码+文档,调试定制服务】
  • Qt常用控件指南(2)
  • 奇技淫巧之花里胡哨的VIM---插件的添加与美化
  • Java毕设项目推荐-基于Vue/SpringBoot的社区智慧医疗服务管理系统【附源码+文档,调试定制服务】
  • 2026年小程序商城原来可以这样0代码搞定!
  • Java毕设项目推荐-基于SpringBoot+Vue的在线教育平台基于springboot的在线学习平台在线教育平台【附源码+文档,调试定制服务】
  • 人群仿真软件:Pathfinder_(14).行业应用与案例研究
  • 2024年提示工程架构师领域发展预测:挖掘行业潜力
  • Linux --- tar命令常见用法
  • 人群仿真软件:Pathfinder_(14).与其他软件的集成与互操作
  • CentOS7更换为阿里源
  • Java毕设项目推荐-基于SpringBoot的电竞赛事管理系统的设计与实现基于springboot的电竞赛事中心设计系统【附源码+文档,调试定制服务】
  • 【Redis基础入门篇2】Redis 5 种基础数据结构,这篇讲得明明白白
  • 人群仿真软件:SimWalk_(1).SimWalk概述
  • 全网最全研究生必备AI论文工具TOP10
  • 【Redis基础入门篇1】一篇搞懂 Redis:是什么?为什么用?怎么装?
  • 人群仿真软件:SimWalk_(1).SimWalk概述与应用领域
  • TRIMMEAN函数完全指南:Excel中去除极端值的智能平均计算
  • 计算机Java毕设实战-基于SpringBoot的智慧医疗管理系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 结课考试项目
  • 2026年微信商城小程序怎样开通?最新0代码开发教程
  • 大模型推理能力的评估标准与方法
  • Java计算机毕设之基于springboot的医院管理系统(完整前后端代码+说明文档+LW,调试定制等)