P3700 [CQOI2017]小Q的表格(反演、分块)
P3700 [CQOI2017]小Q的表格
#include <bits/stdc++.h>using namespace std;const int N = 4e6 + 10, mod = 1e9 + 7;int prime[N], phi[N], g[N], f[N], cnt, n, m;int L[N], R[N], id[N], sum[N], lazy[N], block, blocks;bool st[N];inline int add(int x, int y) {return x + y < mod ? x + y : x + y - mod;
}inline int sub(int x, int y) {return x >= y ? x - y : x - y + mod;
}void init() {phi[1] = 1;for (int i = 2; i < N; i++) {if (!st[i]) {prime[++cnt] = i;phi[i] = i - 1;}for (int j = 1; j <= cnt && 1ll * i * prime[j] < N; j++) {st[i * prime[j]] = 1;if (i % prime[j] == 0) {phi[i * prime[j]] = phi[i] * prime[j];break;}phi[i * prime[j]] = phi[i] * (prime[j] - 1);}}for (int i = 1; i < N; i++) {g[i] = add(g[i - 1], 1ll * i * i % mod * phi[i] % mod);f[i] = 1ll * i * i % mod, sum[i] = add(sum[i - 1], f[i]);}block = sqrt(n);for (int i = 1; i <= n; i += block) {L[++blocks] = i, R[blocks] = min(i + block - 1, n);for (int j = L[blocks]; j <= R[blocks]; j++) {id[j] = blocks;}}
}inline int query(int x) {return add(sum[x], lazy[id[x]]);
}inline void update(int x, int v) {int pos = id[x];for (int i = x; i <= R[pos]; i++) {sum[i] = add(sum[i], v);}pos++;while (pos <= blocks) {lazy[pos] = add(lazy[pos], v);pos++;}
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);scanf("%d %d", &m, &n);init();for (int cas = 1, a, b, k; cas <= m; cas++) {long long x;scanf("%d %d %lld %d", &a, &b, &x, &k);int p = __gcd(a, b);update(p, sub(0, f[p]));f[p] = (x / (a / p)) / (b / p) % mod;update(p, f[p]);int ans = 0;for (int l = 1, r; l <= k; l = r + 1) {r = k / (k / l);ans = add(ans, 1ll * g[k / l] * sub(query(r), query(l - 1)) % mod);}printf("%d\n", ans);}return 0;
}
P3700 [CQOI2017]小Q的表格(反演、分块)相关推荐
- [CQOI2017]小Q的表格(数论+分块)
题目描述 小Q是个程序员. 作为一个年轻的程序员,小Q总是被老C欺负,老C经常把一些麻烦的任务交给小Q来处理.每当小Q不知道如何解决时,就只好向你求助. 为了完成任务,小Q需要列一个表格,表格有无穷多 ...
- [BZOJ4815][CQOI2017]小Q的表格 数论+分块
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4815 题目中所给条件中的$(a,a+b)$和$(a,b)$的关系很瞩目. 然后大家都知道$ ...
- [CQOI2017] 小Q的表格(分块 + 整除分块 + 数学 + 前缀和)
problem luogu-P3700 solution f(a,b)=f(b,a)f(a,b)=f(b,a)f(a,b)=f(b,a) 意味着我们只用考虑半个棋盘的信息. b∗f(a,a+b)=(a ...
- P3700-[CQOI2017]小Q的表格【分块,欧拉函数】
正题 题目链接:https://www.luogu.com.cn/problem/P3700 题目大意 一个n∗nn*nn∗n个数的数字表格,开始位置(a,b)(a,b)(a,b)上的是a∗ba*ba ...
- 【CQOI2017】小Q的表格
[CQOI2017]小Q的表格 稍加推导就会发现\(f(a,b)=a\cdot b\cdot h(gcd(a,b))\). 初始时\(h(n)=1\). 询问前\(k\)行\(k\)列时我们就反演: ...
- [bzoj4813][Cqoi2017]小Q的棋盘
来自FallDream的博客,未经允许,请勿转载,谢谢. 小Q正在设计一种棋类游戏.在小Q设计的游戏中,棋子可以放在棋盘上的格点中.某些格点之间有连线,棋子只能在有连线的格点之间移动.整个棋盘上共有V ...
- 【CQOI2017】bzoj4815 小Q的表格
根据辗转相减可以知道,相互影响的就是 gcd \gcd相同的那些数.又根据条件 2 2可以知道,所有gcd\gcd相同的数的比例是不会改变的,又因为最开始 a(x,y)=xy a(x,y)=xy是一组 ...
- BZOJ 4814 Luogu P3699 [CQOI2017]小Q的草稿 (计算几何、扫描线、set)
题目链接 (BZOJ) http://lydsy.com/JudgeOnline/problem.php?id=4814 (Luogu) https://www.luogu.org/problem/P ...
- bzoj 4813: [Cqoi2017]小Q的棋盘【树形dp】
这么简单的dp我怎么没想到x2 f为从这个点出发后回到这个点最多能走过的点,g为从这个点出发后不回到这个点最多能走过的点,注意g有两种转移:g[u][k]=max(g[u][k],f[u][k-j-1 ...
最新文章
- Android事件分发机制详解
- 教 Chatbot 生成更有营养的对话
- mongoengine.NotUniqueError
- android虚拟电话号码,为何安卓手机坚持虚拟按键?这才是原因
- plotplay恢复默认设置_手把手解答win10系统potplayer经常弹出自动更新提示的还原技巧...
- 怎么捡自己空投_“吃鸡”里信号枪子弹可以复制?玩家发现神秘技巧,空投捡到手软...
- android 程序 共享文件,026 Android多进程-文件共享
- 计算机音乐叫什么名字,电脑开机那段美妙的音乐叫什么名字?
- VmBox硬盘容量调整
- 联通实时计算平台演进与实践
- cmd 下通过NTML代理访问Maven 库
- 微型计算机控制技术小论文,微型计算机控制技术结课论文..doc
- excel打开超链接不使用浏览器,使用默认图片浏览软件
- 学习笔记-支付宝支付
- STM32J-LINK下载教程
- 【Java接口】限制App登录次数
- SpringSecurity的旅途(喜欢的话,可以点个赞哦~)
- 【蓝桥杯真题】 (一) 递归与递推 (Acwing 蓝桥杯 笔记)
- BUCK启动和停止工作的波形
- 年薪 30W 和 60W,数据分析师的两道坎
热门文章
- 每日一笑 | 马冬梅当上了百度投资董事???
- 惊呆了!竟然还有这样的操作!
- 兄弟机cnc系统面板图解_FANUC软操作面板的应用介绍,真的太详细了
- 计算机老师开场白试讲视频,教师招考试讲模版之开场白
- mysql高级查询 二_MySQL高级查询(二)
- 华硕路由器 linux上不了网,华硕ASUS路由器连不上网怎么办?
- php mysql explain_MySQL Explain详解
- linux基础 linhaifeng,Linux基础之命令练习Day2(示例代码)
- linux把终端嵌入桌面,在Ubuntu Linux桌面上嵌入终端窗口
- android.mk 翻译,翻译ANDROID-MK.TXT