整理的算法模板合集: ACM模板

点我看算法全家桶系列!!!

实际上是一个全新的精炼模板整合计划


每日一题(莫反 / 多项式 / 母函数 / 群论) 2021.4.11 莫反

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

Problem

1≤n,m≤105,1≤Q≤2×1041≤n,m≤10 ^5 ,1\le Q\le 2\times 10^41≤n,m≤105,1≤Q≤2×104

Solution

Code

注意mu函数可能是负的,所以一定要记得 + mod % mod

// Problem: P3312 [SDOI2014]数表
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P3312
// Memory Limit: 125 MB
// Time Limit: 1500 ms
//
// Powered by CP Editor (https://cpeditor.org)#include <bits/stdc++.h>#define int long long
using namespace std;
const int N = 2e5 + 7, R = 2e5, M = 2e4 + 7, mod = 1ll << 31;int n, m;
int sigma[N], g[N], mu[N];
int primes[N], cnt;
bool vis[N];
int ans[N];
int tr[N];struct question
{int n, m, a, id;bool operator < (const question &t) const {return a < t.a;}
} que[M];struct number
{int x;bool operator < (const number &t) const {return sigma[x] < sigma[t.x];}
} a[N];inline int lowbit(int x)
{return x & (- x);
}void add_tr(int x, int val)
{for(; x <= R; x += x & (- x)) {(tr[x] += val) %= mod;}
}int query_tr(int x)
{int res = 0;for(; x >= 1; x &= x - 1) {(res += tr[x]) %= mod;}return res;
}void insert_tr(int x)
{for(int k = 1; x * k <= R; ++ k) {add_tr(x * k, (mu[k] * sigma[x] + mod) % mod);}
}void init(int n)
{sigma[1] = g[1] = mu[1] = 1;for(int i = 2; i <= n; ++ i) {if(vis[i] == 0) {primes[ ++ cnt] = i;sigma[i] = g[i] = i + 1;mu[i] = -1;}for(int j = 1; j <= cnt && i * primes[j] <= n; ++ j) {vis[i * primes[j]] = true;if(i % primes[j] == 0) {mu[i * primes[j]] = 0;g[i * primes[j]] = g[i] * primes[j] + 1;sigma[i * primes[j]] = sigma[i] / g[i] * g[i * primes[j]];break;}mu[i * primes[j]] -= mu[i];g[i * primes[j]] = primes[j] + 1;sigma[i * primes[j]] = sigma[i] * sigma[primes[j]];}}for(int i = 1; i <= n; ++ i)a[i].x = i;sort(a + 1, a + 1 + n);
}int query(int n, int m)
{int res = 0, last = 0, now;for(int l = 1, r; l <= n; l = r + 1, last = now) {r = min(n / (n / l), m / (m / l));now = query_tr(r);//这次的 r 就是下次的 l(res += ((now - last + mod) % mod * (n / l) % mod * (m / l) % mod) % mod) %= mod;}return res;
}signed main()
{init(N - 7);int Q;scanf("%lld", &Q);for(int i = 1, a; i <= Q; ++ i) {scanf("%lld%lld%lld", &n, &m, &a);if(n > m) swap(n, m);que[i] = {n, m, a, i};}sort(que + 1, que + 1 + Q);int j = 1;for(int i = 1; i <= Q; ++ i) {for(; j <= R && sigma[a[j].x] <= que[i].a; ++ j) insert_tr(a[j].x);ans[que[i].id] = query(que[i].n, que[i].m);}for(int i = 1; i <= Q; ++ i) {printf("%lld\n", ans[i]);}return 0;
}

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

  1. 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 ...

  2. BZOJ3529: [Sdoi2014]数表(莫比乌斯反演 树状数组)

    题意 题目链接 Sol 首先不考虑\(a\)的限制 我们要求的是 \[\sum_{i = 1}^n \sum_{j = 1}^m \sigma(gcd(i, j))\] 用常规的套路可以化到这个形式 ...

  3. 406 “Z”型矩阵 思维+树状数组 [代码源][namomo spring camp]每日一题div1

    Educational Codeforces Round 8 E. Zbazi in Zeydabad codeforces题目链接 一道CF的E题 晚点补文字,先给代码 //acmer mxc #i ...

  4. 【树状数组 思维题】luoguP3616 富金森林公园

    树状数组.差分.前缀和.离散化 题目描述 博艾的富金森林公园里有一个长长的富金山脉,山脉是由一块块巨石并列构成的,编号从1到N.每一个巨石有一个海拔高度.而这个山脉又在一个盆地中,盆地里可能会积水,积 ...

  5. bzoj2683:简单题(树状数组套CDQ分分治)

    CDQ(陈丹琦)分治 CDQ显然是一个人的名字(2008NOI金牌选手陈丹琦) 这种离线的分治算法在算法界被称为"CDQ分治".  首先回忆一下归并排序的分治, 它的操作是将数组二 ...

  6. 经典算法题每日演练——第十题 树状数组

    原文:经典算法题每日演练--第十题 树状数组 有一种数据结构是神奇的,神秘的,它展现了位运算与数组结合的神奇魅力,太牛逼的,它就是树状数组,这种数据结构不是神人是发现不了的. 一:概序 假如我现在有个 ...

  7. 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 ...

  8. 【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} ...

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

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

最新文章

  1. mysql cronjob 备份_了解cron以及使用cron定时备份MySQL
  2. .NET Remoting的新特性-IpcChannel(.NET Framework 2.0)
  3. 「深入Java」类型信息:RTTI和反射
  4. php redis新增数据类型,Redis有哪几种数据类型
  5. Oracle 计算两个日期间隔的天数、月数和年数
  6. 在scrapy中parse函数里面xpath的内容打印不出来_如何正确的使用Scrapy ?
  7. ant design form表单的时间处理
  8. 信息学奥赛C++语言: 输出最大值
  9. 我的YUV播放器MFC小笔记:解析文件名称
  10. FIIL邬宁:AI能锦上添花,但耳机成不了下一个智能音箱
  11. python查看所有异常类_Python调试常见异常汇总
  12. java分页及返回数据封装实例
  13. 详细解读 SQL 窗口函数
  14. Android-N自动旋转屏幕
  15. c语言实现三角形面积公式字母,c语言计算三角形面积代码
  16. 携程网不能访问的真相曝光
  17. 搞定分布式系列:缓存 热key 问题解决方案
  18. 质量回顾分析系统软件(QRS)
  19. 参加ACM比赛所需的基础知识
  20. 使用有道云笔记的三个技巧

热门文章

  1. 第六篇:Feedforward Networks 前向网络
  2. 前端之图形学-2 着色器
  3. mysql查询各个知识点
  4. oracle 查询本周数据生成下周数据
  5. linux 配置软连接的需要注意的一个问题
  6. 一次奇怪的MySQL复制故障
  7. android ORM框架LitePal 封装SQLite
  8. 项目CPU异常高分析
  9. 修复阻止程序安装或删除的问题
  10. 大数据之Python入门语法基础