【YBT2023寒假Day15 C】缺口一样(数论)(莫队)(根号分治)

news/2024/4/19 4:49:35/文章来源:https://blog.csdn.net/weixin_43346722/article/details/129200777

缺口一样

题目链接:YBT2023寒假Day15 C

题目大意

给你一个序列,多次询问,每次问你一个区间这里面所有非空点集的最大公约数之积,对质数取模。

思路

首先质因子之间是独立的,考虑对于每个质数分别计算再乘起来。
那对于一个质数,如果区间 [l,r][l,r][l,r] 有恰好 cic_ici 个是 pip^ipi 的倍数,那 ppp 贡献的次数就相当于对于每个 iii,选 [l,r][l,r][l,r] 一个子集使得所有数 ppp 的次数最小值恰好是 iii 的方案数乘倍数。
那要的是恰好,我们 cic_ici 是倍数,也就是至少 iii 次,那答案就是:(因为是非空子集所以要减一)
∑i⩾1i(2ci−1−(2ci+1−1))\sum\limits_{i\geqslant 1}i(2^{c_i}-1-(2^{c_{i+1}}-1))i1i(2ci1(2ci+11))
=∑i⩾1(2ci−1)=\sum\limits_{i\geqslant 1}(2^{c_i}-1)=i1(2ci1)

那这个 ppp 的贡献就是 p∑i⩾1(2ci−1)p^{\sum\limits_{i\geqslant 1}(2^{c_i}-1)}pi1(2ci1),根据欧拉定理上面的指数可以对 mod−1mod-1mod1 取模。
那一个区间的问题似乎解决了。


那多个区间要怎么多,那我们一是维护每个质数的 cic_ici,而是再维护对应给答案的贡献。
那维护数组这个不难想到莫队。
那每次就是枚举加入或删除那个数的因子 ppp,把 ppp 的贡献改了。
那因子个数 log⁡n\log nlogn,那复杂度就是 nnlog⁡nn\sqrt{n}\log nnnlogn,过不了。
瓶颈显然在每次插入的时候复杂度是 O(log⁡n)O(\log n)O(logn) 的。


考虑到一个事情是 ⩾R\geqslant \sqrt{R}RRRR 是值域)的因子只会有一个,而且题目的值域是跟 nnn 同阶的。
考虑再来个根号分治,对于大因子我们直接像上面的方法暴力统计。
小的个数不超过 R\sqrt{R}R,可以直接预处理出每个前缀每个小质数 ppp 每个 kkk 这个前缀里有多少个数是 pkp^kpk 的倍数。就不需要用根号分治来做,也是 O(nn)O(n\sqrt{n})O(nn) 的。

那么题目最后就是 O(nn)O(n\sqrt{n})O(nn) 解决了。

代码

#include<cmath>
#include<cstdio>
#include<vector>
#include<algorithm>
#define ll long long
#define mo 998244353using namespace std;const int N = 1e5 + 100;
const int K = 405;
int n, m, prime[N], a[N], sum[N][700];
int blo[N], bl[N], br[N], B, bg[N], np[N];
vector <pair <int, int> > id;
struct Quest {int l, r, id;
}q[N];
ll inv[N], now, ans[N];
vector <ll> tim[N], invs[N];void Init() {inv[0] = inv[1] = 1; for (int i = 2; i < N; i++) inv[i] = inv[mo % i] * (mo - mo / i) % mo;for (int i = 2; i < N; i++) {if (!np[i]) {prime[++prime[0]] = i;if (i <= K) {int now = 1, cnt = 0;while (now * i < N) now *= i, id.push_back(make_pair(now, i));}tim[prime[0]].push_back(i);invs[prime[0]].push_back(inv[i]);np[i] = prime[0];}else np[i] = 0;for (int j = 1; j <= prime[0] && i * prime[j] < N; j++) {np[i * prime[j]] = 1; if (i % prime[j] == 0) break;}}
}bool cmp(Quest x, Quest y) {if (blo[x.l] != blo[y.l]) return blo[x.l] < blo[y.l];return x.r < y.r;
}void insert(int now) {for (int i = 1; i <= prime[0] && prime[i] * prime[i] <= now; i++)while (now % prime[i] == 0) {ll tmp = tim[i][tim[i].size() - 1];tim[i].push_back(tmp * tmp % mo);tmp = invs[i][invs[i].size() - 1];invs[i].push_back(tmp * tmp % mo);now /= prime[i];}if (now > 1) {ll tmp = tim[np[now]][tim[np[now]].size() - 1];tim[np[now]].push_back(tmp * tmp % mo);tmp = invs[np[now]][invs[np[now]].size() - 1];invs[np[now]].push_back(tmp * tmp % mo);}
}int num[N];void ins(int x) {if (bg[x] == 1) return ;now = now * tim[np[bg[x]]][num[np[bg[x]]]] % mo;num[np[bg[x]]]++;
} void dec(int x) {if (bg[x] == 1) return ;num[np[bg[x]]]--;now = now * invs[np[bg[x]]][num[np[bg[x]]]] % mo;
}int main() {
//	freopen("C2.in", "r", stdin);
//	freopen("write.txt", "w", stdout);freopen("lhsx2023.in", "r", stdin);freopen("lhsx2023.out", "w", stdout);Init();scanf("%d %d", &n, &m); B = sqrt(n);for (int i = 1; i <= n; i++) {blo[i] = (i - 1) / B + 1;if (!bl[blo[i]]) bl[blo[i]] = i;br[blo[i]] = i;}for (int i = 1; i <= n; i++) {scanf("%d", &a[i]);int now = a[i];for (int j = 1; j <= prime[0] && prime[j] <= K; j++)while (now % prime[j] == 0) now /= prime[j];bg[i] = now;for (int j = 0; j < id.size(); j++)sum[i][j] = sum[i - 1][j] + (a[i] % id[j].first == 0);insert(a[i]);}for (int i = 1; i <= m; i++) {scanf("%d %d", &q[i].l, &q[i].r); q[i].id = i;}sort(q + 1, q + m + 1, cmp);int l = 1, r = 0; now = 1;for (int i = 1; i <= m; i++)  {while (l > q[i].l) l--, ins(l);while (r < q[i].r) r++, ins(r);while (l < q[i].l) dec(l), l++;while (r > q[i].r) dec(r), r--;ans[q[i].id] = now;for (int j = 0; j < id.size(); j++) {int num = sum[r][j] - sum[l - 1][j];(ans[q[i].id] *= tim[np[id[j].second]][num] * inv[id[j].second] % mo) %= mo;}}for (int i = 1; i <= m; i++) printf("%lld\n", ans[i]);return 0;
}

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

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

相关文章

硬件系统工程师宝典(11)-----去耦电容布局“有讲究”

各位同学大家好&#xff0c;欢迎继续做客电子工程学习圈&#xff0c;今天我们继续来讲这本书&#xff0c;硬件系统工程师宝典。 上篇我们说到在电源完整性分析的目标就是要做到电源的干净、稳定和快速响应&#xff0c;以及针对不同噪声处理的实现方法。今天我们来看看去耦电容…

父传子与子传父步骤

父传子&#xff1a; 问题&#xff1a;父页面中引入子组件 把想要传给子页面的值用在子组件中用 &#xff1a;值“值” (用同一个值好区分)来绑定。 在子页面中用props接收 子组件不能改变父组件传过来的值。&#xff08;传多个页面的时候是&#xff0c;比如父传孙的时候我会…

【2023】华为OD机试真题Java-题目0221-AI处理器组合

AI处理器组合 题目描述 某公司研发了一款高性能AI处理器。每台物理设备具备8颗AI处理器,编号分别为0、1、2、3、4、5、6、7。编号0-3的处理器处于同一个链路中,编号4-7的处理器处于另外一个链路中,不通链路中的处理器不能通信,如下图所示。现给定服务器可用的处理器编号数…

STM32---备份寄存器BKP和 FLASH学习使用

BKP库函数 学习BKP&#xff0c;首先就是知道BKP每一个函数的作用然后如何使用即可 使用备份域的作用只需要操作上面的两个函数即可&#xff0c;其余的都是它的其他功能 BKP简介 备份寄存器是42个16位的寄存器&#xff0c;可用来存储84个字节的用户应用程序数据。他们处在备份…

如何高效管理自己的时间,可以从这几个方向着手

如果你是上班族&#xff0c;天选打工人&#xff0c;你的绝大多数时间都属于老板&#xff0c;能够自己支配的时间其实并不多&#xff0c;所以你可能察觉不到时间管理的重要性。但如果你是自由职业者或者创业者&#xff0c;想要做出点成绩&#xff0c;那你就需要做好时间管理&…

2. Dart 开发工具环境配置

很多编辑器都可以用来开发dart&#xff0c;所以大家可以选择自己喜欢的编辑器去进行开发。我还是比较喜欢vs code如果你不用vs code来开发dart的话&#xff0c;这篇文章可以直接跳过。如果想要在vs code里有dart的语法提示&#xff0c;我们需要安装相关的插件如图点开插件输入d…

预编译(回顾)

浏览器运行机制变量提升机制私有变量提升步骤全局对象 GO 和全局变量对象 VO的区别带var和不带var的区别系统输出顺序变量提升在条件判断下的处理防止函数的变量提升 浏览器运行机制 为了能够让代码执行&#xff0c;浏览器首先会形成一个执行环境栈 ECStack(Execution Contex…

TCP协议和TCP连接

TCP协议和TCP连接一、TCP协议的简介二、TCP连接的简介1、TCP连接的建立&#xff08;TCP三次握手&#xff09;2、TCP连接的断开&#xff08;TCP四次挥手&#xff09;一、TCP协议的简介 TCP&#xff08;Transmission Control Protocol&#xff09;传输控制协议是一种面向连接的、…

java 接口 详解

目录 一、概述 1.介绍 : 2.定义 : 二、特点 1.接口成员变量的特点 : 2.接口成员方法的特点 : 3.接口构造方法的特点 : 4.接口创建对象的特点 : 5.接口继承关系的特点 : 三、应用 : 1.情景 : 2.多态 : ①多态的传递性 : ②关于接口的多态参数和多态…

股票量化交易SQL特征工程入门

虽然现在各种量化教程和自助平台铺天盖地&#xff0c;但是对于新人来说入门最重要的事情就是挖掘特征。 对于传统的学习路径第一步是学习Python或者某一门编程语言&#xff0c;虽说Python入门容易上手快&#xff0c;但是要在实际应用中对股票数据进行分析&#xff0c;并挖掘有…

2023/2/24 图数据库Neo4j的理解与应用

1 什么是图数据库&#xff08;graph database&#xff09; 十大应用案例&#xff1a;https://go.neo4j.com/rs/710-RRC-335/images/Neo4j-Top-Use-Cases-ZH.pdf “大数据”每年都在增长&#xff0c;但如今的企业领导者不仅需要管理更大规模的数据&#xff0c;还迫切需要从现有…

8000+字,就说一个字Volatile

简介 volatile是Java提供的一种轻量级的同步机制。Java 语言包含两种内在的同步机制&#xff1a;同步块&#xff08;或方法&#xff09;和 volatile 变量&#xff0c;相比于synchronized&#xff08;synchronized通常称为重量级锁&#xff09;&#xff0c;volatile更轻量级&…

【大数据】记一次hadoop集群missing block问题排查和数据恢复

问题描述 集群环境总共有2个NN节点&#xff0c;3个JN节点&#xff0c;40个DN节点&#xff0c;基于hadoop-3.3.1的版本。集群采用的双副本&#xff0c;未使用ec纠删码。 问题如下&#xff1a; bin/hdfs fsck -list-corruptfileblocks / The list of corrupt files under path…

汽车零部件行业mes系统具体功能介绍

众所周知&#xff0c;汽车零部件的组装是汽车制造的关键环节&#xff0c;而汽车零部件江湖变革以精益为终极目标。即汽车零部件制造企业转型升级向精益生产和精益管理方向前进&#xff0c;而车间信息化管理是精益化生产的基础。 汽车零部件行业现状 随着全球汽车产业不断升级…

蓝牙标签操作指南

一、APP安装指南 1.APP权限问题 电子标签APP安装之后&#xff0c;会提示一些权限的申请&#xff0c;点击允许。否则某些会影响APP的正常运行。安装后&#xff0c;搜索不到蓝牙标签&#xff0c;可以关闭App&#xff0c;重新打开。 2.手机功能 运行APP时候&#xff0c;需要打开…

Linux基本介绍与常用操作指令

参考链接&#xff1a; Linux面试必备20个常用命令_无 羡ღ的博客-CSDN博客_linux常用命令 1. Linux简介 Linux是一个支持多用户、多任务、多线程和多CPU的操作系统&#xff0c;特点是免费、稳定、高效&#xff0c; 一般运行在大型服务器上。 1.1 常用目录简介 /&#xff1a;根目…

【华为OD机试模拟题】用 C++ 实现 - 数组的中心位置(2023.Q1)

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

MES系统需求误区,一文告诉你需求分析有哪些

在企业的实际应用中&#xff0c;对MES系统需求的分析常常会出现六个错误。 要求广泛&#xff0c;目标不明确由于对MES系统的概念和企业的实际运作不了解&#xff0c;导致企业在提出MES系统的要求时&#xff0c;常常会笼统而不明确&#xff0c;有时会混淆目标和需要。比如&#…

一篇五分生信临床模型预测文章代码复现——FIgure 9.列线图构建,ROC分析,DCA分析 (五)

之前讲过临床模型预测的专栏,但那只是基础版本,下面我们以自噬相关基因为例子,模仿一篇五分文章,将图和代码复现出来,学会本专栏课程,可以具备发一篇五分左右文章的水平: 本专栏目录如下: Figure 1:差异表达基因及预后基因筛选(图片仅供参考) Figure 2. 生存分析,…

复现SCI文章:配对连线、散点箱线图

今天我们要复现的是一篇SCI文章的配对连线箱线图&#xff0c;配对箱线图、或者说配对连线图我们之前有写过&#xff08;ggplot做分组配对连线图、ggplot2|ggpubr配对箱线图绘制与配对检验、复现NC图表-配对小提琴的绘制&#xff08;理解绘图函数内部底层机制&#xff09;&#…