首页 > 其他分享 >2024牛客暑期多校训练营9 C Change Matrix

2024牛客暑期多校训练营9 C Change Matrix

时间:2024-08-14 15:30:16浏览次数:14  
标签:Matrix rs sum 多校 2024 MAXN ans cs MOD

题目大意

维护一个 \(n\) 阶矩阵 \(A\),其中最开始 \(A_{i,j}=\gcd(i,j)\),共有 \(q\) 次操作,每次操作将矩阵某一行或某一列同乘一个数 \(y\),求每一次操作后矩阵的所有元素之和。对 \(10^9+7\) 取模。

\(n,q\leq 10^5\),且保证数据随机生成

思路

根据欧拉函数的性质,有

\[\sum_{c|i,c|j}\varphi(c)=\gcd(i,j) \]

则考虑维护 \(n\) 个矩阵 \(M\),\(M_i\) 的大小为 \(\lfloor\frac{n}{i}\rfloor\),表示的是在其中一个因数为 \(i\) 时另一个要满足的因数的系数,即在上述查询中已经满足 \(c|i\),下面要查 \(c|j\),则一开始每个矩阵的初始元素为 \(\varphi(i)\)。不难发现所有 \(M_i\) 的所有元素的和即为答案。

之后因为行与列思路相等,不妨先考虑行。则假设修改第 \(x\) 行。则查询 \(x\) 的每一个因数 \(c_i\)。将 \(M_{c_i}\) 的第 \(\lfloor\frac{x}{c_i}\rfloor\) 行同乘 \(y\),表示在这个因数下因为要满足另一行的所有的 \(gcd\) 均要乘 \(y\)。之后发现要么全部乘一行要么乘一列,则设 \(r_{i,j},c_{i,j}\) 表示 \(M_i\) 的第 \(j\) 行/列的系数,开始为 \(1\),则 \(M_i\) 的所有元素和为

\[\varphi(i)\times\sum r_{i,j} \times \sum c_{i,j} \]

然后维护即可。

发现由于数据随机生成,则在 \([1,n]\) 中随机选取一个数的期望因子数位 \(\ln n^{(1)}\),则时间复杂度为 \(O(n\ln n)\),空间复杂度为 \(r,c\) 的空间为 \(O(n\ln n)\)。

(1)在 \([1,n]\) 中随机选取一个数的期望因子数位 \(\ln n\) 的证明:\(\sum_{i=1}^n d(i)=\sum_{i=1}^n\sum_{c|i}1=\sum_{c=1}^n\lfloor\frac{n}{i}\rfloor\approx n\ln n\)
则单一的期望值为 \(\ln n\)

代码

#include <bits/stdc++.h>
#define endl "\n"
using namespace std;
typedef long long ll;
const ll MAXN=1e5+5;
const ll MOD=1e9+7;
bool np[MAXN];
ll pm[MAXN],phi[MAXN];
vector<ll>r[MAXN],c[MAXN];
void pshuffle(){
    phi[1]=1;
    np[1]=true;
    for(int i=2;i<MAXN;++i){
        if(!np[i]){
            pm[++pm[0]]=i;
            phi[i]=i-1;
        }
        for(int j=1;j<=pm[0]&&i*pm[j]<MAXN;++j){
            ll p=pm[j];
            np[i*p]=true;
            if(i%p==0){
                phi[i*p]=phi[i]*p;
                break;
            }
            phi[i*p]=phi[i]*(p-1);
        }
    }
}
vector<ll>V[MAXN];
ll rs[MAXN],cs[MAXN];
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    pshuffle();
    ll n,q;
    cin>>n>>q;
    ll ans=0;
    for(int i=1;i<=n;++i){
        r[i].push_back(0);
        c[i].push_back(0);
        for(int j=1;j<=n/i;++j){
            r[i].push_back(1);
            c[i].push_back(1);
            V[i*j].push_back(i);
        }
        ans+=phi[i]*(n/i)*(n/i);

        rs[i]=cs[i]=n/i;
        ans%=MOD;
    }
    while(q--){
        char op;
        ll x,y;
        cin>>op>>x>>y;
        if(op=='R'){
            for(auto v:V[x]){
                ans=((ans-phi[v]*rs[v]%MOD*cs[v]%MOD)%MOD+MOD)%MOD;
                rs[v]+=(r[v][x/v]*(y-1)%MOD);
                rs[v]%=MOD;
                r[v][x/v]*=y;
                r[v][x/v]%=MOD;
                ans+=phi[v]*rs[v]%MOD*cs[v]%MOD;
                ans%=MOD;
            }
        }else{
            for(auto v:V[x]){
                ans=((ans-phi[v]*rs[v]%MOD*cs[v]%MOD)%MOD+MOD)%MOD;
                cs[v]+=(c[v][x/v]*(y-1)%MOD);
                cs[v]%=MOD;
                c[v][x/v]*=y;
                c[v][x/v]%=MOD;
                ans+=phi[v]*rs[v]%MOD*cs[v]%MOD;
                ans%=MOD;
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}

标签:Matrix,rs,sum,多校,2024,MAXN,ans,cs,MOD
From: https://www.cnblogs.com/tanghg/p/18359060/contest-nk9c

相关文章

  • 2024 ICPC ShaanXi Provincial Contest
    A.chmod模拟#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;voidsolve(){strings;cin>>s;inta=s[0]-'0',b=s[1]-'0',c=s[2]-'0';if(a&4)cout<&l......
  • 2024“钉耙编程”中国大学生算法设计超级联赛(8)1006 cats 的最小生成树
    题目大意:给出有\(n\)个点\(m\)条边的图,接下来进行若干次操作,每次操作取出当前图的最小生成树,然后删去这些构成最小生成树的边,知道该图不连通,输出每条边在第几次操作时被删除思路:由于构成最小生成树的边数是\(n-1\)条边,所以最多操作次数为\(\lfloor\frac{m}{n-1}\rfloor\),每次......
  • IntelliJ IDEA【最新】2024终极版 下载安装教程,图文步骤详解
    文章目录软件介绍软件下载安装步骤ActivationMethod专栏推荐:超多精品软件(持续更新中…)软件介绍IntelliJIDEA是一款由JetBrains公司开发的集成开发环境(IDE),专为软件开发人员设计,尤其在Java编程领域享有极高的声誉,被认为是市场上最好的JavaIDE之一。以下是对In......
  • 2024年8月中国数据库排行榜:OceanBase攀升再夺冠,达梦跃入三甲关
    在这个炽热的季节,随着巴黎奥运会的盛大开幕,全球将目光聚集在了体育的无限魅力和竞技的巅峰对决上。如同奥运赛场上的激烈角逐,中国数据库界也上演着一场技术与创新的较量,各个数据库产品正在中国乃至全球舞台上展示着它们的实力和潜力。现在让我们共同盘点本月墨天轮社区中国数据库......
  • 2024-08-14:用go语言,给定两个长度分别为n和m的整数数组nums和changeIndices,下标从1开始
    2024-08-14:用go语言,给定两个长度分别为n和m的整数数组nums和changeIndices,下标从1开始。初始时,nums中所有下标均未标记。从第1秒到第m秒,每秒可以选择以下四种操作之一:1.选择范围[1,n]中一个下标i,将nums[i]减少1。2.将nums[changeIndices[s]]设为任意非负整数。3.选择范围......
  • CentOS 7 停服后(2024-06-30)升级最新的Linux 内核
     1、CentOS7更新 USTC的源sudosed-i.bak\-e's|^mirrorlist=|#mirrorlist=|g'\-e's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos-vault/centos|g'\/etc/yum.repos.d/CentOS-Base.repo 2......
  • DeiT-LT:印度科学院提出针对长尾数据的`DeiT`升级模型 | CVPR 2024
    DeiT-LT为ViT在长尾数据集上的应用,通过蒸馏DIST标记引入CNN知识,以及使用分布外图像并重新加权蒸馏损失来增强对尾类的关注。此外,为了减轻过拟合,论文建议用经过SAM训练的CNN教师进行蒸馏,促使所有ViT块中DIST标记学习低秩泛化特征。经过DeiT-LT的训练方案,DIST标记成为尾类的专家,分......
  • StarNet:关于 Element-wise Multiplication 的高性能解释研究 | CVPR 2024
    论文揭示了staroperation(元素乘法)在无需加宽网络下,将输入映射到高维非线性特征空间的能力。基于此提出了StarNet,在紧凑的网络结构和较低的能耗下展示了令人印象深刻的性能和低延迟来源:晓飞的算法工程笔记公众号论文:RewritetheStars论文地址:https://arxiv.org/abs/240......
  • H7-TOOL混合脱机烧录以及1拖4不同的通道烧录不同的程序操作说明(2024-08-07)
     【应用场景】原本TOOL的1拖4是用于同时烧录相同程序给目标板,但有时候一个板子上有多个不同的MCU,客户希望仅通过一个TOOL就可以完成对板子上多个MCU的烧录,也就是1拖4不同的通道烧录不同的程序,此贴为此制作。【实验目标】由于这个属于定制需求,需要简单修下目标文件,后面升......
  • [权威出版|稳定检索]2024年航空航天、机械与控制工程国际会议(AMCE 2024)
    2024年航空航天、机械与控制工程国际会议2024InternationalConferenceonAerospace,MechanicalandControlEngineering【1】大会信息会议名称:2024年航空航天、机械与控制工程国际会议会议简称:AMCE2024大会时间:请查看官网大会地点:中国·温州截稿时间:请查看官网......