P3700-[CQOI2017]小Q的表格【分块,欧拉函数】

正题

题目链接:https://www.luogu.com.cn/problem/P3700


题目大意

一个n∗nn*nnn个数的数字表格,开始位置(a,b)(a,b)(a,b)上的是a∗ba*bab。数字表格需满足以下条件

  1. 对于任意(a,b)(a,b)(a,b)f(a,b)=f(b,a)f(a,b)=f(b,a)f(a,b)=f(b,a)
  2. 对于任意(a,b)(a,b)(a,b)b∗f(a,a+b)=(a+b)∗f(a,b)b*f(a,a+b)=(a+b)*f(a,b)bf(a,a+b)=(a+b)f(a,b)

mmm次修改数字表格中的一个数,你需要调整其他数字使其满足条件,然后求前kkk行前kkk列的数字和。


解题思路

一道神仙题,首先我们拿出这个不伦不类的式子b∗f(a,a+b)=(a+b)∗f(a,b)b*f(a,a+b)=(a+b)*f(a,b)bf(a,a+b)=(a+b)f(a,b)化成
f(a,a+b)a(a+b)=f(a,b)ab\frac{f(a,a+b)}{a(a+b)}=\frac{f(a,b)}{ab}a(a+b)f(a,a+b)=abf(a,b)
发现这个式子和更相减损法很像,反正最后递归下去可以化成f(a,b)ab=f(gcd(a,b),gcd(a,b))gcd(a,b)2\frac{f(a,b)}{ab}=\frac{f(gcd(a,b),gcd(a,b))}{gcd(a,b)^2}abf(a,b)=gcd(a,b)2f(gcd(a,b),gcd(a,b))
定义d=gcd(a,b)d=gcd(a,b)d=gcd(a,b),也就是f(a,b)=f(d,d)abgcd(a,b)2f(a,b)=\frac{f(d,d)ab}{gcd(a,b)^2}f(a,b)=gcd(a,b)2f(d,d)ab
那么k∗kk*kkk的数字和就是∑i=1kfi,i∑x=1k∑y=1kxyi2[gcd(x,y)==i]\sum_{i=1}^kf_{i,i}\sum_{x=1}^k\sum_{y=1}^k\frac{xy}{i^2}[gcd(x,y)==i]i=1kfi,ix=1ky=1ki2xy[gcd(x,y)==i]
然后化成∑i=1kfi,i∑x=1⌊ki⌋∑y=1⌊ki⌋xy[gcd(x,y)==1]\sum_{i=1}^kf_{i,i}\sum_{x=1}^{\lfloor\frac{k}{i}\rfloor}\sum_{y=1}^{\lfloor\frac{k}{i}\rfloor}xy[gcd(x,y)==1]i=1kfi,ix=1iky=1ikxy[gcd(x,y)==1]
之后我们有结论是后面那个东西∑x=1n∑y=1nxy[gcd(x,y)==1]=∑i=1nφ(i)i2\sum_{x=1}^{n}\sum_{y=1}^{n}xy[gcd(x,y)==1]=\sum_{i=1}^n\varphi(i)i^2x=1ny=1nxy[gcd(x,y)==1]=i=1nφ(i)i2
具体证明的话就是

H(x)=∑x=1n∑y=1nxy[gcd(x,y)==1]H(x)=\sum_{x=1}^{n}\sum_{y=1}^{n}xy[gcd(x,y)==1]H(x)=x=1ny=1nxy[gcd(x,y)==1]
那么H(x)H(x)H(x)H(x−1)H(x-1)H(x1)多了一个2x∑y=1n[gcd(x,y)==1]y2x\sum_{y=1}^n[gcd(x,y)==1]y2xy=1n[gcd(x,y)==1]y
也就是多了一个x∗2∗φ(x)x2x*2*\frac{\varphi(x)x}{2}x22φ(x)x

所以可以线性预处理这个东西

我们就可以对后面那个东西做整除分块,我们就需要处理fi,if_{i,i}fi,i的前缀和

我们一次操作需要进行n\sqrt nn次询问前缀和,但是修改只需要一次,所以我们可以平衡一下时间。也就是降低询问复杂度提升修改复杂度,用分块存储块中每个位置的块内前缀和和块的前缀和即可。

时间复杂度O(mn)O(m\sqrt n)O(mn)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const ll N=4e6+10,P=1e9+7;
ll n,m,T,w[N],v[N],sum[N],L[N],R[N];
ll cnt,pri[N],phi[N],g[N],pos[N];
ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%P;x=x*x%P;b>>=1;}return ans;
}
void Prime(){phi[1]=1;for(ll i=2;i<=n;i++){if(!v[i])pri[++cnt]=i,phi[i]=i-1;for(ll j=1;j<=cnt&&i*pri[j]<=n;j++){v[i*pri[j]]=1;if(i%pri[j]==0){phi[i*pri[j]]=phi[i]*pri[j];break;}phi[i*pri[j]]=phi[i]*phi[pri[j]];}}for(ll i=1;i<=n;i++)g[i]=(g[i-1]+phi[i]*i%P*i%P)%P;return;
}
ll GetS(ll x){if(!x)return 0ll;return (sum[pos[x]-1]+w[x])%P;
}
int main()
{scanf("%lld%lld",&m,&n);Prime();T=sqrt(n);for(ll i=1;i<=n;i++)v[i]=i*i%P;for(ll i=1;i<=T;i++)L[i]=R[i-1]+1,R[i]=i*T;if(T*T!=n)T++,L[T]=R[T-1]+1,R[T]=n;for(ll i=1;i<=T;i++){for(ll j=L[i];j<=R[i];j++)pos[j]=i,w[j]=(v[j]+w[j-1]*(j>L[i]))%P;sum[i]=(sum[i-1]+w[R[i]])%P;}while(m--){ll a,b,x,k;scanf("%lld%lld%lld%lld",&a,&b,&x,&k);x%=P;ll d=__gcd(a,b),y=pos[d];v[d]=x*d*d%P*power(a*b%P,P-2)%P;for(ll i=d;i<=R[y];i++)w[i]=((i>L[y])*w[i-1]+v[i])%P;for(ll i=y;i<=T;i++)sum[i]=(sum[i-1]+w[R[i]])%P;ll ans=0;for(ll l=1,r;l<=k;l=r+1){r=k/(k/l);ans=(ans+g[k/l]*(GetS(r)-GetS(l-1)+P)%P)%P;}printf("%lld\n",ans);}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.Net Core应用框架Util介绍(一)

距离上次发文&#xff0c;已经过去了三年半&#xff0c;这几年技术更新节奏异常迅猛&#xff0c;.Net进入了跨平台时代&#xff0c;前端也被革命性的颠覆。回顾2015年&#xff0c;正当我还沉迷于JQuery EasyUi的封装时&#xff0c;突然意识到技术已经过时。JQuery在面对更加复…

牛客网 【每日一题】5月26日题目精讲 [JSOI2007]建筑抢修

链接&#xff1a; 文章目录题目描述题意&#xff1a;题解&#xff1a;题目描述 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏&#xff1a;经过了一场激烈的战斗&#xff0c;T部落消灭了所有z部落的入侵者。但是T部落的基地里已经有N个建筑设施受到了严重的损伤&#xf…

【二分】数列分段(ybtoj 二分-1-1)

数列分段 ybtoj 二分-1-1 题目大意 给出一个序列A&#xff0c;让你把它分成m段&#xff0c;使每段和最大值最小 输入样例 5 3 4 2 4 5 1输出样例 6数据范围 1⩽M⩽N⩽1051\leqslant M\leqslant N\leqslant 10^51⩽M⩽N⩽105 sum{Ai}⩽109sum\begin{Bmatrix}A_i\end{Bmatr…

CF878E-Numbers on the blackboard【并查集,贪心】

正题 题目链接:https://www.luogu.com.cn/problem/CF878E 题目大意 nnn个数字&#xff0c;每次可以把两个相邻的数字x,yx,yx,y变为x2yx2yx2y。 mmm次询问一个区间合成一个数字后最大是多少。 解题思路 答案可以把每个数字变成xicix_i^{c_i}xici​​&#xff0c;其中ci≤ci−1…

2021-03-24

非空G个数G的大小n的奇偶性答案>4\\D3\奇数D3至少一个大小>2\D3均为1偶数D-12大小均>2\D2至少一个大小>2奇数D2一个大小1&#xff0c;一个大小>1偶数D-12均为1奇数D-12均为1偶数

牛客网【每日一题】5月27日题目精讲 货币系统

链接&#xff1a; 文章目录题目描述题解&#xff1a;代码&#xff1a;题目描述 在网友的国度中共有n种不同面额的货币&#xff0c;第i种货币的面额为a[i]&#xff0c;你可以假设每一种货币都有无穷多张。为了方便&#xff0c;我们把货币种数为n、面额数组为a[1…n]的货币系统记…

使用.NET Core+Docker 开发微服务

.NET Core发布很久了,因为近几年主要使用java&#xff0c;所以还没使用过.NET Core&#xff0c;今天正好有一个c#写的demo&#xff0c;需要做成服务&#xff0c;不想再转成java来实现&#xff0c;考虑使用.NET CORE来尝下鲜&#xff0c;目标是开发一个微服务&#xff0c;然后部…

【二分】防具布置/秦腾与教学评估(ybtoj 二分-1-2/jzoj 1253/luogu 4403)

正题 ybtoj 二分-1-2 jzoj 1253 luogu 4403 题目大意 给出n组数&#xff1a;si,ei,dis_i,e_i,d_isi​,ei​,di​ 对于每组数据&#xff0c;表示在sis_isi​加1&#xff0c;然后每隔did_idi​就加1&#xff0c;当位置大于eie_iei​时结束 题目保证数字是奇数的位置最多只有1个…

[XSY] 智慧树(线性同余方程组,线段树/树状数组)

智慧树 解决此题有两个要点&#xff1a; 如何判断一个线性同余方程组有没有解如何统计合法子序列数目 先看第2点&#xff1a; 若一个序列是合法的&#xff0c;则这个序列的所有子序列都是合法的 考虑对∀1≤i≤n\forall 1\leq i\leq n∀1≤i≤n&#xff0c;求出以iii为左端点…

P2272-[ZJOI2007]最大半连通子图【tarjan,缩点】

正题 题目链接:https://www.luogu.com.cn/problem/P2272 题目大意 半连通图定义为任意两个点(u,v)(u,v)(u,v)满足uuu可以到vvv或vvv可以到uuu的有向图。 现在给出一张图&#xff0c;求最大半连通子图与其数量。 解题思路 显然一个强连通一定是一个半连通&#xff0c;所以我…

牛客网 【每日一题】5月28日题目精讲 Protecting the Flowers

链接&#xff1a; 文章目录题目描述题意&#xff1a;题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld题目描述 Farmer John went to cut some wood and…

【二分】最大均值(ybtoj 二分-1-3)

最大均值 ybtoj 二分-1-3 题目大意 给出一个序列&#xff0c;让你求一个长度不小于m的子序列&#xff0c;使其平均值最大 输入样例 10 6 6 4 2 10 3 8 5 9 4 1输出样例 6500数据范围 1⩽L⩽N⩽1051\leqslant L \leqslant N \leqslant 10^51⩽L⩽N⩽105 Ai⩽2000A_i\leqs…

Steeltoe之Config客户端篇

Steeltoe是一款开源项目&#xff0c;其目标是选取源自Netflix及其它公司的工具&#xff0c;使它们能够运用于.NET社区。它不仅可以在.NET Core上&#xff0c;也可以在.NET Framework 4.X以上使用。此外&#xff0c;大多数的组件能够同时运行在本地机器及Cloud Foundry(一个领先…

[XSY] 绿色(圆方树、树形DP、树上差分)

绿色 题意简述 题解 首先&#xff0c;每次修改完点权后&#xff0c;重新考虑一遍所有路径显然是不现实的&#xff0c;所以我们考虑求出经过每个点的两端同色的简单路径数&#xff0c;这样权值和容易统计和修改。 接下来分析仙人掌上的简单路径性质。一条简单路径上的边&…

P4309-[TJOI2013]最长上升子序列【Splay】

正题 题目链接:https://www.luogu.com.cn/problem/P4309 题目大意 nnn次&#xff0c;第iii次在第xix_ixi​个数字后面插入iii然后询问最长上升子序列长度。 解题思路 因为是插入所以考虑用SplaySplaySplay维护&#xff0c;因为从小到大插入&#xff0c;其实每次就是找一个在x…

牛客网 【每日一题】5月29日 管道取珠

链接&#xff1a; 文章目录题目描述题意&#xff1a;题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 524288K&#xff0c;其他语言1048576K 64bit IO Format: %lld题目描述 管道取珠是小X很喜欢的一款游戏。在本…

【dfs】拔河比赛(ybtoj dfs-1-1)

拔河比赛 ybtoj dfs-1-1 题目大意 给你n个数&#xff0c;让你分成两堆&#xff0c;使其数量相差不大于1&#xff0c;问数值相差最小是多少 输入样例 1 3 55 50 100输出样例 5数据范围 1⩽T⩽501\leqslant T \leqslant 501⩽T⩽50 2⩽N⩽202\leqslant N\leqslant 202⩽N⩽…

半天搭建你的Jenkins持续集成与自动化部署系统

前言相信每一位程序员都经历过深夜加班上线的痛苦&#xff01;而作为一个加班上线如家常便饭的码农&#xff0c;更是深感其痛。由于我们所做的系统业务复杂&#xff0c;系统庞大&#xff0c;设计到多个系统之间的合作&#xff0c;而核心系统更是采用分布式系统架构&#xff0c;…

牛客网 【每日一题】6月10日 失衡天平

链接&#xff1a; 文章目录题目描述题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 终于Alice走出了大魔王的陷阱&#xff0c;可是现在傻傻…

P3345-[ZJOI2015]幻想乡战略游戏【点分树,RMQ】

正题 题目链接:https://www.luogu.com.cn/problem/P3345 题目大意 nnn个点的一棵树&#xff0c;每次修改一个点的点权后询问一个xxx最小化∑y1ndis(x,y)∗dy\sum_{y1}^ndis(x,y)*d_yy1∑n​dis(x,y)∗dy​ 解题思路 先是构建一个点分树&#xff0c;然后考虑如何计算答案。 我…