昨天晚上用的镜像,看的B的图片瞬间不想写了(而且这周作业还没碰),不过看到D题突然想做做,于是有了下面的思路,写了一个小时,写完没交看了下榜单发现C题竟然过的人也不多,看了看C题感觉没啥思路就跑去补作业了~~


D. GCD of an Array

由于题目中要求gcd⁡\gcdgcd取模,显然gcd⁡(x%mod,y%mod)≠gcd⁡(x,y)%mod\gcd(x\%mod,y\%mod)\ne\gcd(x,y)\%modgcd(x%mod,y%mod)​=gcd(x,y)%mod,于是很容易想到维护数组每个数质因数分解后的幂次x=p1α1p2α2…pkαkx=p_1^{\alpha_1}p_2^{\alpha_2}\dots p_k^{\alpha_k}x=p1α1​​p2α2​​…pkαk​​,而pkp_kpk​对最终gcd⁡\gcdgcd的贡献是pkmin⁡(α1,k,α2,k,…,αn,k)p_k^{\min(\alpha_{1,k},\alpha_{2,k},\dots,\alpha_{n,k})}pkmin(α1,k​,α2,k​,…,αn,k​)​

而对某个位置i×i×i×一个数x=p1αi,1p2αi,2…pkαi,kx=p_1^{\alpha_{i,1}}p_2^{\alpha_{i,2}}\dots p_{k}^{\alpha_{i,k}}x=p1αi,1​​p2αi,2​​…pkαi,k​​则表示修改αi,1,αi,2,…,αi,k\alpha_{i,1},\alpha_{i,2},\dots,\alpha_{i,k}αi,1​,αi,2​,…,αi,k​这些值(准确来说是+上一个数,我们只需要记录之前的值,把之前的贡献减去,然后把现在的贡献加上即可)

而对于贡献的维护我们需要一个能够支持插入,删除,最小值的数据结构,这里使用multiset\text{multiset}multiset
trick:对于初始数组可以看出一个操作i,aii,a_ii,ai​

时间复杂度:O{(n+m)max⁡(ai)log⁡n}O\{(n+m)\sqrt{\max(a_i)}\log{n}\}O{(n+m)max(ai​)​logn}

#define IO ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr)
#pragma GCC optimize(2)
#include<set>
#include<map>
#include<iostream>
#include<algorithm>
using namespace std;
using ll=long long;
constexpr ll mod=1e9+7;
constexpr int N=200010;
int a[N],n,m;
ll d;
multiset<int> s[N];
map<int,int> mp[N];
ll qmi(ll a,ll b)
{ll res=1;while(b){if(b&1) res=res*a%mod;b>>=1;a=a*a%mod;}return res;
}
ll inv(ll x)
{return qmi(x,mod-2);
}
void insert(int k,int i,int cnt)
{if(mp[k].count(i)){if(s[i].size()==n) d=d*inv(qmi(i,*s[i].begin()))%mod;s[i].erase(s[i].find(mp[k][i]));mp[k][i]=mp[k][i]+cnt;s[i].insert(mp[k][i]);if(s[i].size()==n) d=d*qmi(i,*s[i].begin())%mod;}else{mp[k][i]=cnt;s[i].insert(mp[k][i]);if(s[i].size()==n) d=d*qmi(i,*s[i].begin())%mod;}
}
void divide(int k,int x)
{for(int i=2;i<=x/i;i++)if(x%i==0){int cnt=0;while(x%i==0) x/=i,cnt++;insert(k,i,cnt);}if(x>1) insert(k,x,1);
}
int main()
{IO;cin>>n>>m;for(int i=1;i<=n;i++) cin>>a[i];d=1;for(int i=1;i<=n;i++) divide(i,a[i]);while(m--){int i,x;cin>>i>>x;divide(i,x);cout<<d<<'\n';}return 0;
}

codeforces1493 D. GCD of an Array(数论)相关推荐

  1. CF1471 D - Strange Definition(思维,分类讨论,lcm,gcd的性质,数论)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #694 (Div. 2) D 很好的一道数论思维题 D - Str ...

  2. [GDUT 决赛]--GCD,LCM——我是好人(数论)

    Description 众所周知,我是好人! 所以不会出太难的题,题意很简单 给你两个数n和m,问你有多少对正整数对最大公约数是n,最小公倍数是m 最后友情提供解题代码(我真是太好人了) void s ...

  3. F - GCD or MIN(数论)

    F - GCD or MIN 首先gcd⁡(x,y)≤min⁡(x,y)\gcd(x,y)\leq \min(x,y)gcd(x,y)≤min(x,y) 数组中任意2个数的gcd可能是一种方案,任意3 ...

  4. GCD与LCM【数论】

    题目大意: 给出两个数的GCDGCD和LCMLCM,求这两个数的最小差值. IuputIuput 6 36 OutputOutput 6 思路: 一道数论题. 我们设这两个数分别为xx和yy且x≤yx ...

  5. Codeforces Round #705 (Div. 2) D. GCD of an Array 质因子分解 + stl维护

    传送门 题意: 给nnn个数,让后qqq个操作,每次选择一个位置的数使其乘xxx,每次询问后输出所有数的gcdgcdgcd. 思路: 这个题思路算是比较好想的.首先就是一个计算方式即计算所有数的gcd ...

  6. 【数论Day1】 最大公约数(gcd)题目

    20170529-3数论_gcd 题解: http://www.cnblogs.com/ljc20020730/p/6919116.html 日期 序号 题目名称 输入文件名 输出文件名 时限 内存 ...

  7. TYUT-A专题题解(二)

    TYUT-A专题题解(一) TYUT-A专题题解(二) 36暴力枚举 AOJ0008 Sum of 4 Integers[暴力]_海岛Blog-CSDN博客 HDU1407 测试你是否和LTC水平一样 ...

  8. Codeforces Round #705 (Div. 2) A-D

    明显感觉到码力下降了 需要老年人康复训练计划 这场码力比较大 需要思维比较巧来减少码力 算是少见的cf div2了 A. Anti-knapsack 给你 nnn 和 kkk ,问是否有办法找出最大的 ...

  9. 2018CCPC桂林站题解(D G H J L)

    题目链接:http://codeforces.com/gym/102823 问题 D: Bits Reverse 时间限制: 1 Sec  内存限制: 128 MB 提交: 167  解决: 127 ...

最新文章

  1. UOJ【UR #12】实验室外的攻防战
  2. 【Android工具】更新手机视频流媒体客户端播放器OPlayer
  3. (转贴) C#编码标准--编码习惯
  4. PAT天梯赛L3-004 肿瘤诊断
  5. 厦门银行服务器没有收到证书,FRM证书申请成功后,一直未收到证书该如何做?...
  6. QuickBI助你成为分析师——计算字段功能
  7. Elasticsearch 参考指南(引导检查)
  8. 设计模式:个人理解关于代理和委托模式的一点区别
  9. mysql relay log 查看_Mysql-relay log
  10. 【BZOJ4972】小Q的方格纸 前缀和
  11. android 无线传递文件夹,android 通过WIFI实现文件传输
  12. 给一整型变量a,写两段代码,第一个设置a的bit3,第二个清除a的bit3.“a的bit3”
  13. 最小树形图-hdu4966
  14. Mac Xcode 各种缓存清理
  15. android rsa加密工具类,GitHub - Lerist/encrypt: Android 加密解密工具包。
  16. tbox系统启动过程分析及优化
  17. 我想成为一名黑客,该如何开始?
  18. python医疗影像_基于PyRadiomics的医疗影像纹理获取原型系统集成
  19. BootLoader、Linux Kernel(linux内核)、RootFile(根文件系统)
  20. 你准备会计初级并通过考试用了多久?

热门文章

  1. linux中wine yum安装,分享|在基于RedHat或Debian的系统上安装 Wine 1.7
  2. 算法设计与分析——贪心算法——汽车加油问题
  3. 算法设计与分析——回溯法——n皇后问题
  4. java char short区别_java 彻底理解 byte char short int float long double
  5. 101. 对称二叉树023(BFS)
  6. 『软件工程9』结构化系统分析——解决软件“做什么”问题
  7. [JavaWeb-JavaScript]JavaScript运算符
  8. [蓝桥杯][算法提高VIP]数的划分-dp
  9. AcWing 1113. 红与黑
  10. 快速排序在最坏的情况下时间复杂度(Ω(nlgn)(算法导论第三版9.3-3))