F. Pairwise Modulo

想到了,但又没完全想到。。wtcl


首先 pk=pk−1+∑1≤i<kakmodai+∑1≤i<kaimodakp_k=p_{k-1}+\sum_{1\leq i<k} a_k \bmod \ a_i+\sum_{1\leq i<k} a_i \bmod \ a_kpk​=pk−1​+∑1≤i<k​ak​mod ai​+∑1≤i<k​ai​mod ak​

∑1≤i<kakmodai=∑1≤i<k(ak−⌊akai⌋ai)=(k−1)ak−s\sum_{1\leq i<k} a_k\bmod a_i=\sum_{1\leq i<k}(a_k- \left \lfloor \frac{a_k}{a_i} \right \rfloor a_i)=(k-1)a_k-s∑1≤i<k​ak​modai​=∑1≤i<k​(ak​−⌊ai​ak​​⌋ai​)=(k−1)ak​−s

考虑如何计算s=∑1≤i<k⌊akai⌋ais=\sum_{1\leq i<k}\left \lfloor \frac{a_k}{a_i} \right \rfloor a_is=∑1≤i<k​⌊ai​ak​​⌋ai​

如果kai≤ak<(k+1)aika_i\leq a_k<(k+1)a_ikai​≤ak​<(k+1)ai​那么⌊akai⌋ai=kai\left \lfloor \frac{a_k}{a_i} \right \rfloor a_i=ka_i⌊ai​ak​​⌋ai​=kai​,这个东西用树状数组维护一下,不太容易描述,详细看代码。


∑1≤i<kaimodak=∑1≤i<k(ai−⌊aiak⌋ak)=∑1≤i<kai−t\sum_{1\leq i<k} a_i \bmod a_k=\sum_{1\leq i<k}(a_i- \left \lfloor \frac{a_i}{a_k} \right \rfloor a_k)=\sum_{1\leq i<k}a_i-t∑1≤i<k​ai​modak​=∑1≤i<k​(ai​−⌊ak​ai​​⌋ak​)=∑1≤i<k​ai​−t

考虑如何计算t=∑1≤i<k⌊aiak⌋akt=\sum_{1\leq i<k}\left \lfloor \frac{a_i}{a_k} \right \rfloor a_kt=∑1≤i<k​⌊ak​ai​​⌋ak​

不但发现对于任意两个数u,vu,vu,v来说有下面规律⌊uv⌋v=kv,u≤kv<(k+1)v\left \lfloor \frac{u}{v} \right \rfloor v=kv,u\leq kv<(k+1)v⌊vu​⌋v=kv,u≤kv<(k+1)v

枚举k,我们只需用统计出{ai,1≤i<k}\{a_i,1\leq i<k\}{ai​,1≤i<k}每段区间aia_iai​的个数,就可以计算ttt

Code

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
template <class T=int> T rd()
{T res=0;T fg=1;char ch=getchar();while(!isdigit(ch)) {if(ch=='-') fg=-1;ch=getchar();}while( isdigit(ch)) res=(res<<1)+(res<<3)+(ch^48),ch=getchar();return res*fg;
}
const int N=300010;
template <typename T=int>
struct Fenwick
{const int n;T t[N];Fenwick(int n):n(n){memset(t,0,sizeof t);}void add(int k,T v){for(;k<=n;k+=k&-k) t[k]+=v;}T qsum(int k){T v=0;for(;k;k-=k&-k) v+=t[k];return v;}T get(int l,int r){return qsum(r)-qsum(l-1);}
};
int n;
int a[N];
int main()
{n=rd();for(int i=1;i<=n;i++) a[i]=rd();Fenwick<ll> f1(300000),f2(300000); //f1计算s f2计算tll pre=0,ans=0;for(int i=1;i<=n;i++){ans+=1ll*a[i]*(i-1);//s_1ans+=pre;//t_1ans-=f1.qsum(a[i]);// s_2for(int j=a[i];j<=300000;j+=a[i]){int l=j,r=min(300000,j+a[i]-1);ans-=f2.get(l,r)*j;//t_2f1.add(l,a[i]);}f2.add(a[i],1);pre+=a[i];printf("%lld%c",ans," \n"[i==n]);}return 0;
}

codeforces1553 F. Pairwise Modulo(数学)相关推荐

  1. codeforces 7.22 F Pairwise Modulo

    codeforces 7.22 F Pairwise Modulo 给出n个数的数列a,每个数互不相同且都小于3e5,求出qk=∑1<=i,j<=kaimodajq_k=\sum_{1&l ...

  2. Harbour.Space Scholarship Contest 2021-2022 F. Pairwise Modulo 逆向思维 + 树状数组

    传送门 文章目录 题意 思路: 题意 给定一个不同数组成的序列aaa,定义pkp_kpk​为pk=∑i=1k∑j=1kaimodajp_k=\sum_{i=1}^k\sum_{j=1}^ka_i\bm ...

  3. CodeForces - 1553F Pairwise Modulo(数论+树状数组)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,求 pk=∑1≤i,j≤kaimodajp_k = \sum_{1 \le i, j \le k} a_i \bmod a_jpk​=∑1 ...

  4. 牛客月赛60 F.被抓住的小竹(数学推式子)

    牛客月赛60 F.被抓住的小竹(数学&推式子) 考虑枚举每个区间的贡献. 每个区间内所有的数都作为 x x x一次时的贡献和. 因为要求区间内 ≥ x \ge x ≥x数个数, 那么区间内的数 ...

  5. 妙笔生画:用desmos在线绘制y=f(x)或z=f(x,y)数学函数图像

    有的时候,我们想看一看数学函数y=x2+6xlogxy=x^2+6xlogxy=x2+6xlogx或z=x3+y2z=x^3+y^2z=x3+y2到底长什么样,想画出这个数学函数,方便观察这个函数的某 ...

  6. 2019ICPC银川 F.Function!(数学)

    题意: 解法: f a ( x ) 的 逆 函 数 是 l o g a b a n s = ∑ a = 2 n ( a ∑ b = a n ⌊ f a − 1 ( b ) ⌋ ⌈ f b − 1 ( ...

  7. 牛客OI赛制测试赛2 F :假的数学游戏

    题目传送门 斯特林公式 代码: #include<bits/stdc++.h> using namespace std;const double PI=3.1415926; typedef ...

  8. Harbour.Space Scholarship Contest 2021-2022 (open for everyone, rated, Div. 1 + Div. 2)

    Harbour.Space Scholarship Contest 2021-2022 (open for everyone, rated, Div. 1 + Div. 2) 题号 题目 知识点 A ...

  9. 01 决策树 - 数学理论概述 - 熵

    今天开始进入决策树的算法部分,首先介绍一下这部分涉及到的知识点. 一.大纲 1.信息熵 决策树在生成过程中,对于评判是否要对树进行划分的关键指标.即树生成时的决策根本. 2.决策树 之前提过KD树的划 ...

最新文章

  1. Rust 交叉编译设置
  2. UVa 10290 - {Sum+=i++} to Reach N
  3. AspNet Core 下利用普罗米修斯+Grafana构建Metrics和服务器性能的监控
  4. note4 android8,Note4配三枚麦克风 可同时录制8个声音
  5. SSD Network Architecture--keras version
  6. tomcat8开启远程debug
  7. iOS开发之isa、superclass(课程总结)
  8. 【数学-常用公式】基本积分表
  9. Simulink 快速入门(二)--创建简单模型
  10. FYI | Brain-Art Competition 2018 开始投稿了
  11. Github代码复现-IVIX中国波指计算
  12. 点赞 分数 20作者 陈越单位 浙江大学
  13. 5G注册流程分级详解
  14. php beanstalk 客户端,Pheanstalk(beanstalk的PHP客户端)-连接如何工作?
  15. jQuery弹出插件thickbox使用心得
  16. 错题整理:作业100题(一)
  17. python--元组tuple
  18. 数学文化赏析MOOC知识点归纳【2023】
  19. Java工具集-HMacSHA1加解密
  20. 16g电脑内存有什么好处_win7系统16g内存和win10系统16g内存有什么区别

热门文章

  1. linux强大功能,linux grep和find 的强大功能
  2. c++STL中的find()函数 有两种使用方法
  3. 高等数学下-赵立军-北京大学出版社-题解-练习8.3
  4. poj2182 Lost Cows-暴力
  5. POJ 3984 迷宫问题
  6. Prototype(原型)--对象创建模式
  7. 数据结构与算法-- 数组中出现次数超过一半的数字(时间复杂度的讨论)
  8. 逆向so_记一次APP的so层算法逆向(七)
  9. python编程模式是什么_python 开发的三种运行模式详细介绍
  10. CoreJava 笔记总结-第九章 集合