题意

题目链接

Sol

首先不考虑\(a\)的限制

我们要求的是

\[\sum_{i = 1}^n \sum_{j = 1}^m \sigma(gcd(i, j))\]

用常规的套路可以化到这个形式

\[\sum_{d = 1}^n \sigma (d) \sum_{k = 1}^{\frac{n}{d}} \mu(k) \frac{n}{kd} \frac{m}{kd}\]

设\(kd = T\)

那么

\(\sum_{T = 1}^n \left\lfloor \frac{n}{T} \right\rfloor \left\lfloor \frac{m}{T} \right\rfloor \sum_{d \ | T} \sigma(d) \mu(\frac{T}{d})\)

然后按照套路筛出后面的卷积。

但是现在有\(a\)的限制了。。

那么可以直接离线之后树状数组维护一下。

时间复杂度:\(O(T\sqrt{n}logn)\)

约数个数和用埃氏筛两行就筛出来了

#include<bits/stdc++.h>
#define chmax(a, b) (a = (a > b ? a : b))
#define chmin(a, b) (a = (a < b ? a : b))
//#define int long long
using namespace std;
const int MAXN = 3e5 + 10;
inline int read() {char c = getchar(); int x = 0, f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();return x * f;
}
int T, mx, mu[MAXN], phi[MAXN], prime[MAXN], tot, vis[MAXN], si[MAXN], out[MAXN], p[MAXN];
struct Query{int N, M, a, id;bool operator < (const Query &rhs) const {return a < rhs.a;}
}q[MAXN];
int comp(const Query &a, const Query &b) {return a.id < b.id;
}
int comp2(const int &a, const int &b) {return si[a] < si[b];
}
void Get(int N) {for(int i = 1; i <= N; i++) for(int j = i; j <= N; j += i) si[j] += i;vis[1] = 1; mu[1] = 1;for(int i = 2; i <= N; i++) {if(!vis[i]) prime[++tot] = i, mu[i] = -1;for(int j = 1; j <= tot && i * prime[j] <= N; j++) {vis[i * prime[j]] = 1;if(!(i % prime[j])) {mu[i * prime[j]] = 0; break;}else mu[i * prime[j]] = -mu[i];}}
}
#define lb(x) (x & (-x))
int Tr[MAXN];
void Add(int x, int val) {while(x <= mx) Tr[x] += val, x += lb(x);
}
int Sum(int x) {int ans = 0;while(x) ans += Tr[x], x -= lb(x);return ans;
}
int solve(int n, int m) {int rt = 0, las = 0, now;for(int i = 1, nxt; i <= n; i = nxt + 1) {nxt = min(m / (m / i), n / (n / i)); now = Sum(nxt);rt += (n / i) * (m / i) * (now - las);las = now;}return rt;
}
signed main() {T = read();for(int i = 1; i <= T; i++) {q[i].N = read(), q[i].M = read(), q[i].a = read(), q[i].id = i;if(q[i].N > q[i].M) swap(q[i].N, q[i].M);;chmax(mx, q[i].N);}Get(mx);for(int i = 1; i <= mx; i++) p[i] = i;sort(p + 1, p + mx + 1, comp2);sort(q + 1, q + T + 1);for(int t = 1, d = 1; t <= T; t++) {for(; d <= mx && si[p[d]] <= q[t].a; d++) {for(int k = p[d]; k <= mx; k += p[d]) {if(!mu[k / p[d]]) continue;Add(k, si[p[d]] * mu[k / p[d]]);}}out[q[t].id] = solve(q[t].N, q[t].M);}for(int i = 1; i <= T; i++) printf("%d\n", out[i] < 0 ? out[i] + 2147483648 : out[i]);//printf("%d\n", out[i] <);return 0;
}

BZOJ3529: [Sdoi2014]数表(莫比乌斯反演 树状数组)相关推荐

  1. (每日一题)P3312 [SDOI2014]数表(经典莫比乌斯反演 + 树状数组维护离线询问)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 每日一题(莫反 / 多项式 / 母函数 / 群论) 2021.4.11 莫反 P3312 [SDOI2 ...

  2. P3312-[SDOI2014]数表【莫比乌斯反演,树状数组】

    正题 题目链接:https://www.luogu.com.cn/problem/P3312 题目大意 定义F(x)F(x)F(x)表示xxx的约数和 给出n,m,an,m,an,m,a,求∑i=1n ...

  3. P3312 [SDOI2014]数表(离线 + 树状数组前缀和优化)

    P3312 [SDOI2014]数表 推式子 ∑i=1n∑j=1mσ(gcd(i,j))∑d=1nσ(d)∑i=1nd∑j=1md[gcd(i,,j)==1]∑d=1nσ(d)∑d=1ndμ(k)nk ...

  4. BZOJ3529: [Sdoi2014]数表(莫比乌斯反演,离线)

    Description 有一张 n×m 的数表,其第 i 行第 j 列(1 <= i <= n, 1 <= j <= m)的数值为 能同时整除 i 和 j 的所有自然数之和.给 ...

  5. 【SDOI2014】数表【莫比乌斯反演】【树状数组】

    传送门 传送门 题意: TTT组询问给定n,m,an,m,an,m,a,求 ∑i=1N∑j=1M[(∑d∈N∗[d∣i][d∣j]d)≤a]∑d∈N∗[d∣i][d∣j]d\sum_{i=1}^{N} ...

  6. BZOJ 3529 数表(莫比乌斯+树状数组)

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3529 题意:有一张n×m的数表,其第i行第j列的数值为能同时整除i和j的所有自然数 ...

  7. [BZOJ3529][Sdoi2014]数表

    [BZOJ3529][Sdoi2014]数表 试题描述 有一张N×m的数表,其第i行第j列(1 < =i < =n,1 < =j < =m)的数值为能同时整除i和j的所有自然数 ...

  8. 洛谷 P5057 [CQOI2006]简单题(树状数组)

    嗯... 题目链接:https://www.luogu.org/problem/P5057 首先发现这道题中只有0和1,所以肯定与二进制有关.然后发现这道题需要支持区间更改和单点查询操作,所以首先想到 ...

  9. Color the ball(HDU1556)树状数组

    每次对区间内气球进行一次染色,求n次操作后后所有气球染色次数. 树状数组,上下区间更新都可以,差别不大. 1.对于[x,y]区间,对第x-1位减1,第y位加1,之后向上统计 #include<b ...

最新文章

  1. hibernate -- HQL语句总结
  2. 扩展源_视觉框架SimpleCV - 图像源
  3. MEGA 视频目标检测 数据集 : ILSVRC2015 VID 说明
  4. 上海图书馆 计算机软件,上海图书馆上海科技情报研究所招聘信息
  5. dev中循环展示图片的样式怎么写_图中的这种样式怎么用HTML写?
  6. Hbase 中文参考指南 3.0 校对活动发车了~
  7. c++11线程必须要懂得同步技术
  8. iphone通知和android,手机App 通知数量太多,让你备感压力吗?教你如何消除令人心烦的信息通知(iPhone、Android)...
  9. html是超文本标记语言标签,main标签
  10. @property 的属性class
  11. EF Code First Migrations数据库迁移 (转帖)
  12. hadoop学习使用
  13. R语言基于ggplot绘制多条ROC曲线
  14. 天勤率辉考研数据结构2021
  15. WACV 2021 论文大盘点-GAN篇
  16. w3wp ash oracle,巧妙使用ASH信息
  17. spyder 更改默认工作目录的最优方法
  18. 苹果计算机能打出分数吗,Apple M1芯片安兔兔跑分曝光:分数打破安兔兔记录
  19. Personal views on domain change of several theorems and applications
  20. 数据仓库基础3-整明白粒度

热门文章

  1. android平板开发板,利用开源开发板自制的平板电脑 | 雷锋网
  2. linux回到桌面的命令符_Linux命令行环境与桌面环境护切换
  3. 硬件手册里经常出现的assert以及deassert
  4. 通信与信号处理杂文目录
  5. JavaScript的toString()和valueOf()函数
  6. Pentaho 7.0更新:数据准备和分析两不误
  7. Android实战技巧之十一:Android Studio和Gradle
  8. C#中的预编译指令介绍
  9. Mirror--如何在主库上增加文件
  10. C++11 并发指南三(std::mutex 详解)