题意

  https://loj.ac/problem/2193

题解

  ​显然就是求 $\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}$。

  code

【SDOI 2014】数表的更多相关文章

  1. [SDOI 2014]数表

    Description 有一张N×m的数表,其第i行第j列(1 < =i < =N,1 < =j < =m)的数值为 能同时整除i和j的所有自然数之和.给定a,计算数表中不大于 ...

  2. 解题:SDOI 2014 数表

    题面 为了好写式子,先不管$a$的限制 设$facs$为因子和,那么有 $ans=\sum\limits_{i=1}^n\sum\limits_{j=1}^mfacs(gcd(i,j))$ 再设$f( ...

  3. 「BZOJ 3529」「SDOI 2014」数表「莫比乌斯反演」

    题意 有一张 \(n\times m\) 的数表,其第\(i\)行第\(j\)列的数值为能同时整除\(i\)和\(j\)的所有自然数之和. \(T\)组数据,询问对于给定的 \(n,m,a\) , 计 ...

  4. 【BZOJ 3529】【SDOI 2014】数表

    看Yveh的题解,这道题卡了好长时间,一直不明白为什么要······算了当时太naive我现在都不好意思说了 #include<cstdio> #include<cstring> ...

  5. 【BZOJ 3531】【SDOI 2014】旅行

    因为有$10^5$个宗教,需要开$10^5$个线段树. 平时开的线段树是“满”二叉树,但在这个题中代表一个宗教的线段树管辖的区间有很多点都不属于这个宗教,也就不用“把枝叶伸到这个点上”,所以这样用类似 ...

  6. [BZOJ 3530][Sdoi 2014]数数

    阿拉~好像最近总是做到 AC 自动机的题目呢喵~ 题目的算法似乎马上就能猜到的样子…… AC 自动机 + 数位 dp 先暴力转移出 f[i][j] :表示从 AC 自动机上第 j 号节点走 i 步且不 ...

  7. BZOJ 3533 sdoi 2014 向量集

    设(x,y)为Q的查询点,分类讨论如下:1.y>0:  最大化a*x+b*y,维护一个上凸壳三分即可 2.y<0:最大化a*x+b*y  维护一个下凸壳三分即可 我们考虑对时间建出一棵线段 ...

  8. 解题:SDOI 2014 重建

    题面 做这个这个题需要稍微深入理解一点矩阵树定理:套矩阵树定理得到的东西是有意义的,它是“所有生成树边权乘积之和”(因为度数矩阵是点的边权和,邻接矩阵是边权),即$\sum_{t}\prod_{e∈t ...

  9. 【BZOJ 3530】【SDOI 2014】数数

    http://www.lydsy.com/JudgeOnline/problem.php?id=3530 上午gty的测试题,爆0了qwq 类似文本生成器那道题,把AC自动机的转移建出来,准确地说建出 ...

随机推荐

  1. DVD Cloner 2019MAC如何使用?

    DVD Cloner 2019 for mac是一款应用在Mac上的DVD刻录软件,它可以将DVD克隆到任何空白光盘,包括具有多种复制模式的DVD + R / RW,DVD-R / RW,DVD + ...

  2. Python爬虫学习==>第六章:爬虫的基本原理

    学习目的: 掌握爬虫相关的基本概念 正式步骤 Step1:什么是爬虫 请求网站并提取数据的自动化程序 Step2:爬虫的基本流程 Step3:Request和Response 1.request 2. ...

  3. UOJ#494K点最短路

    #include <cstdio> #include <iostream> #include <cstring> #include <queue> #d ...

  4. 人工智能06 能计划的agent

    能计划的agent 存储与计算 响应agent的动作功能几乎没有做任何计算.从本质上讲,这些agent执行的动作或者由他们的设计者.或者通过学习.或者通过演化过程.或者由以上几方面的组合来选择给他们的 ...

  5. 【CUDA开发】Thrust库

    Thrust库从C++的STL中得到灵感,将最简单的类似于STL的结构放在Thrust库中,比如STL中的vector.此外,Thrust库还包含STL中的算法和迭代器.        Thrust函 ...

  6. 【Python开发】增强的格式化字符串format函数

    自python2.6开始,新增了一种格式化字符串的函数str.format(),可谓威力十足.那么,他跟之前的%型格式化字符串相比,有什么优越的存在呢?让我们来揭开它羞答答的面纱. 语法 它通过{}和 ...

  7. 基于硬件的消息队列中间件 Solace 简介之二

    前言...... 前面简单介绍了Solace来自于哪家公司, 主要能做哪些事情. 本篇主要进一步介绍Solace作为消息传递的中间件如何工作的. 传统意义上来讲, 每当我们谈到消息中间件时, 首先想到 ...

  8. [Python3] 035 函数式编程 高阶函数

    目录 函数式编程 之 高阶函数 1. 引子 2. 系统提供的高阶函数 3. functools 包提供的 reduce 4. 排序 函数式编程 之 高阶函数 把函数作为参数使用的函数,叫高阶函数 1. ...

  9. vue第一篇(搭建vue开发环境)

    1.下载node并安装 下载地址: https://nodejs.org/zh-cn/ 下载后双击文件安装 2.检查是否安装成功 node -v v10.16.0 npm -v 6.9.0 如果能正常 ...

  10. 【扩展GCD】荒岛野人

    题目 [题目描述] 克里特岛以野人群居而著称.岛上有排列成环行的M个山洞.这些山洞顺时针编号为1,2,-,M.岛上住着N个野人,一开始依次住在山洞C1,C2,-,CN中,以后每年,第i个野人会沿顺时针 ...