【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自动机的转移建出来,准确地说建出 ...
随机推荐
- iOS去除数组中重复的model数据
// 去除数组中model重复 ; i < self.selectedModelArray.count; i++) { ;j < self.selectedModelArray.count ...
- ubuntu安装dockers过程:
1. 先对系统进行更新 1.1 apt-get upgrade 1.2 去中国关于dockers的网站 http://get.daocloud.io/ 1.3 安装docker curl -sSL h ...
- mariadb(第二章)增删改 MariaDB 数据类型
MariaDB 数据类型 MariaDB数据类型可以分为数字,日期和时间以及字符串值. 使用数据类型的原则:够用就行, 尽量使用范围小的,而不用大的 常用的数据类型 整数:int, bit 小数:de ...
- 手写k-means算法
作为聚类的代表算法,k-means本属于NP难问题,通过迭代优化的方式,可以求解出近似解. 伪代码如下: 1,算法部分 距离采用欧氏距离.参数默认值随意选的. import numpy as np d ...
- LINQ查询表达式详解(2)——查询表达式的转换
简介 C#在执行LINQ查询表达式的时候,并不会指定其执行语义,而是将查询表达式转换为遵循查询表达式模式的方法的调用.具体而言,查询表达式将转换为以下名称的调用:Where.Select.Select ...
- 学python的第三天
函数的作用 不知道大家是否注意到,在上面的代码中,我们做了3次求阶乘,这样的代码实际上就是重复代码.编程大师Martin Fowler先生曾经说过:“代码有很多种坏味道,重复是最坏的一种!”,要写出高 ...
- 第四周课程总结&实验报告(二)
Java实验报告(二) 实验二 Java简单类与对象 一. 实验目的 (1) 掌握类的定义,熟悉属性.构造函数.方法的作用,掌握用类作为类型声明变量和方法返回值: (2) 理解类和对象的区别,掌握构造 ...
- Eclipse myeclipse下配置HanLP的教程
一.说明 博主的配置 1:window10 2:myeclipse 3:jdk1.8 备注:文章分享自贾继康的博客,博客使用的hanlp是1.6.8的版本.大家可以去下载最新的1.7版本了,也比较推荐 ...
- 如何使用JavaScript实现前端导入和导出excel文件
一.SpreadJS 简介 SpreadJS 是一款基于 HTML5 的纯 JavaScript 电子表格和网格功能控件,以“高速低耗.纯前端.零依赖”为产品特色,可嵌入任何操作系统,同时满足 .NE ...
- springboot读取配置不存在报错
@Value("${log.regId}")private String regId = "123123"; String regId = env.getPro ...