【SDOI 2014】数表
题意
题解
显然就是求 $\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{m} \sigma_1(\gcd{(i,j)}) [\gcd(i,j)\le a]$($\sigma_1(x)$ 表示求 $x$ 的所有约数之和),看到 $\gcd$ 就知道是莫比乌斯反演基础题吧
如果不考虑 $a$ 的限制,这就是推一遍莫反的模板题,那先不考虑,则原式变为$$\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{m} \sigma_1(\gcd{(i,j)})$$
根据套路枚举约数 $$\sum\limits_{k=1}^{n} \sum\limits_{i=1}^{n} \sum\limits_{j=1}^{m} \sigma_1(k) [\gcd(i,j)=k]$$
显然当 $i|k, j|k$ 时,$\gcd(i,j)$ 才有可能为 $k$。所以简化式子得 $$\sum\limits_{k=1}^{n} \sum\limits_{i=1}^{\lfloor\frac{n}{k}\rfloor} \sum\limits_{j=1}^{\lfloor\frac{m}{k}\rfloor} \sigma_1(k) [\gcd(i,j)=1]$$
把 $\sigma_1(k)$ 挪到前面,并用经典公式 $\sum\limits_{d|n} \mu(d) = [n=1]$ 对 $[\gcd(i,j)=1]$ 反演 $$\sum\limits_{k=1}^{n} \sigma_1(k)\sum\limits_{i=1}^{\lfloor\frac{n}{k}\rfloor} \sum\limits_{j=1}^{\lfloor\frac{m}{k}\rfloor} \sum\limits_{d|\gcd{(i,j)}} \mu(d)$$
$$\sum\limits_{k=1}^{n} \sigma_1(k)\sum\limits_{i=1}^{\lfloor\frac{n}{k}\rfloor} \sum\limits_{j=1}^{\lfloor\frac{m}{k}\rfloor} \sum\limits_{d|i, d|j} \mu(d)$$
根据套路,把 $d$ 挪到前面并改成枚举 $x$。由于限制 $d|i, d|j$,只有 $i$ 和 $j$ 都是 $d$ 的倍数时才会累加一个 $\mu(d)$。所以对于一个 $d$,$\mu(d)$ 会被累加 $\lfloor\frac{n}{kd}\rfloor \lfloor\frac{m}{kd}\rfloor$ 次(易证 $\lfloor\frac{\lfloor \frac{x}{y}\rfloor}{z}\rfloor = \lfloor\frac{\frac{x}{y}}{z}\rfloor$)。故式子转化为 $$\sum\limits_{k=1}^{n} \sigma_1(k) \sum\limits_{d=1}^{n} \mu(d) \lfloor\frac{n}{kd}\rfloor \lfloor\frac{m}{kd}\rfloor$$
令 $n\le m$,则显然当 $d\gt \lfloor \frac{n}{k}\rfloor$ 时,$\lfloor \frac{n}{dk}\rfloor=0$。所以可以更改 $d$ 的上界 $$\sum\limits_{k=1}^{n} \sigma_1(k) \sum\limits_{d=1}^{\lfloor \frac{n}{k}\rfloor} \mu(d) \lfloor\frac{n}{kd}\rfloor \lfloor\frac{m}{kd}\rfloor$$
根据套路,令 $T=kd$,而把 $ \sum\limits_{d=1}^{\lfloor \frac{n}{k}\rfloor}$ 乘以 $k$ 就变成了 $T$ 的枚举式,然后我们会发现 $T$ 的枚举值依次是 $k,2k,3k,...,\lfloor \frac{n}{k}\rfloor\times k$,也就是枚举一组 $k、T$ 要满足 $T$ 是 $k$ 的倍数。显然可以先枚举 $T$,然后枚举 $k$,要求 $k$ 是 $T$ 的约数。于是式子最终转化为 $$\sum\limits_{T=1}^{n} \lfloor\frac{n}{T}\rfloor \lfloor\frac{m}{T}\rfloor \sum\limits_{k|T} \sigma_1(k) \mu(\frac{T}{k}) $$
如果没有 $a$ 的限制,这道题到此就做完了,整除分块回答询问即可
有 $a$ 的限制的话我们就考虑离线排序回答,这样有机会使总时间复杂度仍然只是扫一遍
我们设 $g(T) = \sum\limits_{k|T} \sigma_1(k) \mu(\frac{T}{k})$,显然当 $\sigma_1(k)\le a$ 时,才会对 $g(T)$ 产生贡献
于是将询问按 $a$ 从小到大排序后扫一遍,$a$ 变大会使得一些 $\sigma_1(a)$ 对 $g(T)$ 产生贡献,我们就用枚举倍数的方法找到所有的 $T$,然后因为我们要动态修改 $g(T)$ 的值,还要区间询问,所以写一个常数小的树状数组即可
处理完新产生的贡献之后回答这组询问即可
最坏情况下所有的 $\sigma_1(d)$ 都能产生贡献。枚举所有倍数 $T$ 的复杂度为 $\sum\limits_{i=1}^{n} \frac{n}{i}\le n\log_2{n}$,因为考虑 $\frac{n}{1}+\frac{n}{2}+\frac{n}{3}+...+\frac{n}{n}$ 的值(这就是枚举的量),它显然小于 $\frac{n}{1}+\frac{n}{2}^2+\frac{n}{4}^4+\frac{n}{8}^8+...+\frac{n}{\lfloor\log_2{n}\rfloor}^{\lfloor\log_2{n}\rfloor} = n\log_2{n}$(这就是分治的过层,共 $log_2$ 层,每层 $n$ 个点,所以共 $n\log_2{n}$ 个点),所以简单得证
对于每个枚举的倍数 $T$,更新 $g(T)$ 的时间复杂度为 $\log{n}$,所以修改部分的总复杂度是 $O(n\log^2{n})$
每次询问需要整除分块,查询区间和的复杂度为 $O(\log{n})$,所以总复杂度为 $O(n\log^2{n} + q\sqrt{n}\log{n})$
取模的话,如果要求答案膜 $p$,你可以一直膜 $kp(k∈Z)$,输出时再膜 $p$。所以用 unsigned int 自然溢出即可,最后输出答案时膜 $2^{31}$。
【SDOI 2014】数表的更多相关文章
- [SDOI 2014]数表
Description 有一张N×m的数表,其第i行第j列(1 < =i < =N,1 < =j < =m)的数值为 能同时整除i和j的所有自然数之和.给定a,计算数表中不大于 ...
- 解题:SDOI 2014 数表
题面 为了好写式子,先不管$a$的限制 设$facs$为因子和,那么有 $ans=\sum\limits_{i=1}^n\sum\limits_{j=1}^mfacs(gcd(i,j))$ 再设$f( ...
- 「BZOJ 3529」「SDOI 2014」数表「莫比乌斯反演」
题意 有一张 \(n\times m\) 的数表,其第\(i\)行第\(j\)列的数值为能同时整除\(i\)和\(j\)的所有自然数之和. \(T\)组数据,询问对于给定的 \(n,m,a\) , 计 ...
- 【BZOJ 3529】【SDOI 2014】数表
看Yveh的题解,这道题卡了好长时间,一直不明白为什么要······算了当时太naive我现在都不好意思说了 #include<cstdio> #include<cstring> ...
- 【BZOJ 3531】【SDOI 2014】旅行
因为有$10^5$个宗教,需要开$10^5$个线段树. 平时开的线段树是“满”二叉树,但在这个题中代表一个宗教的线段树管辖的区间有很多点都不属于这个宗教,也就不用“把枝叶伸到这个点上”,所以这样用类似 ...
- [BZOJ 3530][Sdoi 2014]数数
阿拉~好像最近总是做到 AC 自动机的题目呢喵~ 题目的算法似乎马上就能猜到的样子…… AC 自动机 + 数位 dp 先暴力转移出 f[i][j] :表示从 AC 自动机上第 j 号节点走 i 步且不 ...
- BZOJ 3533 sdoi 2014 向量集
设(x,y)为Q的查询点,分类讨论如下:1.y>0: 最大化a*x+b*y,维护一个上凸壳三分即可 2.y<0:最大化a*x+b*y 维护一个下凸壳三分即可 我们考虑对时间建出一棵线段 ...
- 解题:SDOI 2014 重建
题面 做这个这个题需要稍微深入理解一点矩阵树定理:套矩阵树定理得到的东西是有意义的,它是“所有生成树边权乘积之和”(因为度数矩阵是点的边权和,邻接矩阵是边权),即$\sum_{t}\prod_{e∈t ...
- 【BZOJ 3530】【SDOI 2014】数数
http://www.lydsy.com/JudgeOnline/problem.php?id=3530 上午gty的测试题,爆0了qwq 类似文本生成器那道题,把AC自动机的转移建出来,准确地说建出 ...
随机推荐
- Golang的一个CLI框架
因为机缘巧合,因为希望能在VPS中使用百度网盘,了解到了一个开源的项目BaiduPCS-Go,可以用来直接存取访问百度网盘,做的相当不错 而且看ISSUES,作者可能还是个学生,很强的样子.稍微看了下 ...
- office web apps安装部署,配置https,负载均衡(七)配置过程中遇到的问题详细解答
该篇文章,是这个系列文章的最后一篇文章,该篇文章将详细解答owa在安装过程中常见的问题. 如果您没有搭建好office web apps,您可以查看前面的一系列文章,查看具体步骤: office we ...
- PTA --- 天梯赛 L1-059 敲笨钟
L1-059 敲笨钟 (20 point(s)) 微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉.为了增加敲钟的趣味性,还会糟改几句古诗词.其糟改的方法为:去网上搜寻压“ong” ...
- bean初始化和销毁的几种方式
Bean生命周期 Bean创建 -->初始化 -->销毁 1.自定义Bean初始化 和销毁的方法 init-method和destroy-method 创建Bike类 public cla ...
- 帮助文档 - Wget
(GNU Wget)http://www.gnu.org/software/wget/ 快速浏览(单HTML文件):(GNU Wget 在线手册)http://www.gnu.org/software ...
- EL表达式的11隐含对象
EL表达式在不同范围如何取值: <% pageContext.setAttribute("book", "红楼梦"); request.setAttrib ...
- VBnet窗口获取键盘输入
https://blog.csdn.net/youyoulg/article/details/39120669 C# WinFrom捕获按键按下事件(一) https://blog.csdn.net/ ...
- 多模块环境下修改包名Rename directory与Rename package
选中包名->右键Refactor->Rename,如果会弹出的警告框让选择Rename directory和Rename package时,若选择Rename directory,则是只修 ...
- QQ登錄實現功能
<html> <head> <title></title> </head> <body> <form> <p& ...
- linux常见的安装软件包命令
常用的 RPM 软件包命令 安装软件的命令格式 rpm -ivh filename.rpm 升级软件的命令格式 rpm -Uvh filename.rpm 卸载软件的命令格式 rpm -e filen ...