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

传送门

文章目录

  • 题意
  • 思路:

题意

给定一个不同数组成的序列aaa,定义pkp_kpkpk=∑i=1k∑j=1kaimodajp_k=\sum_{i=1}^k\sum_{j=1}^ka_i\bmod a_jpk=i=1kj=1kaimodaj,让你对于每个i∈[1,n]i\in [1,n]i[1,n]求出pip_ipi

2≤n≤2e5,1≤ai≤3e52\le n\le 2e5,1\le a_i\le 3e52n2e5,1ai3e5

思路:

考虑每次新增了什么,不难发现从pi−1p_{i-1}pi1pip_ipi新增了∑j=1iaimodaj+∑j=1iajmodai\sum_{j=1}^i a_i\bmod a_j+\sum_{j=1}^ia_j\bmod a_ij=1iaimodaj+j=1iajmodai

对于这俩式子的不取模的时候贡献,第一个是查询[1,i−1][1,i-1][1,i1]中大于aia_iai的值的个数再乘上aia_iai,第二个是查询[1,i−1][1,i-1][1,i1]中小于aia_iai的值的和。

对于第二个式子,aia_iai固定,我们考虑枚举aia_iai的倍数,对应[0,ai),[ai,2∗ai),...[0,a_i),[a_i,2*a_i),...[0,ai),[ai,2ai),...,我们还是查询区间和,让后减去k∗aik*a_ikai即可,其中kkk是有几个aia_iai

对于第一个,我们考虑将其化简一下,aimodaj=ai−aj∗⌊aiaj⌋a_i\bmod a_j=a_i-a_j*\left \lfloor \frac{a_i}{a_j} \right \rflooraimodaj=aiajajai,对于后面的下取整的式子我们显然可以直接整除分块,但是这样会t掉。。

直接考虑贡献不好弄,我们考虑对于每个aia_iai,我们将其对其他数的贡献存下来,也就是我们依旧枚举aia_iai的倍数,将ai,2∗ai,...a_i,2*a_i,...ai,2ai,...的位置都加上aia_iai,此时只需要查询[1,ai][1,a_i][1,ai]的和即可,贡献都已经放到里面了。

// Problem: F. Pairwise Modulo
// Contest: Codeforces - Harbour.Space Scholarship Contest 2021-2022 (open for everyone, rated, Div. 1 + Div. 2)
// URL: https://codeforces.com/problemset/problem/1553/F
// Memory Limit: 256 MB
// Time Limit: 4000 ms
// 
// Powered by CP Editor (https://cpeditor.org)//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#include<random>
#include<cassert>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid ((tr[u].l+tr[u].r)>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=600010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n;
int a[N];
struct BIT {LL tr[N];#define lowbit(x) (x&(-x))void add(int x,int c) {while(x<N) tr[x]+=c,x+=lowbit(x);}LL sum(int x) {if(x<=0) return 0ll;LL ans=0;// while(x) ans+=tr[x],x-=lowbit(x);for(int i=x;i;i-=lowbit(i)) ans+=tr[i];return ans;}}tr1,tr2,tr3;int main()
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d",&a[i]);LL ans=0,mx=*max_element(a+1,a+1+n);for(int i=1;i<=n;i++) {for(int j=0,k=a[i]-1;k<=mx*2;j++,k+=a[i]) {LL all=tr1.sum(k)-tr1.sum(max(k-a[i],0));ans+=all;ans-=1ll*j*a[i]*(tr2.sum(k)-tr2.sum(max(k-a[i],0)));}ans+=1ll*a[i]*(i-1);ans-=tr3.sum(a[i]);for(int j=a[i];j<=mx;j+=a[i]) tr3.add(j,a[i]);// for(int l=1,r;l<=a[i];l=r+1) {// r=a[i]/(a[i]/l);// int now=a[i]/l;// ans-=1ll*now*(tr1.sum(r)-tr1.sum(l-1));// }tr1.add(a[i],a[i]);tr2.add(a[i],1);printf("%lld ",ans);}puts("");return 0;
}
/**/

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

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

相关文章

miller_rabin 证明与实现

143. 质数判定__模板题链接 前置知识 费马小定理&#xff1a;ppp是质数&#xff0c;则对于任意的aaa&#xff0c;aaa与ppp互质&#xff0c;则有ap−1≡1(modp)a ^ {p - 1} \equiv 1 \pmod {p}ap−1≡1(modp)。 二次探测定理&#xff1a;如果ppp是一个质数&#xff0c;x2≡1(…

基于@media (prefers-color-scheme: [dark|light])的暗黑与亮色主题切换

今天有人反馈使用pdf.js的时候&#xff0c;发现pdf.js阅读器在自己的Mac Book电脑上显示的背景是暗黑色&#xff0c;而别人的电脑上却是白色&#xff1a; 根据这个问题&#xff0c;找到了pdf.js使用的view.css有段代码&#xff0c;类似这样&#xff1a; media (prefers-color-…

做「容量预估」可没有true和false

这里是Z哥的个人公众号每周五11&#xff1a;45 按时送达当然了&#xff0c;也会时不时加个餐&#xff5e;我的第「85」篇原创敬上随着20年来互联网的蓬勃发展&#xff0c;一个软件系统所要面对的访问压力上限被逐渐提高。虽然如此&#xff0c;但是那些体量达到亿级或者是千万级…

P3396 哈希冲突 根号分治

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个长度为nnn的数组aaa&#xff0c;每次操作有两种&#xff1a; (1)(1)(1) 给出x,yx,yx,y&#xff0c;问aaa中下表在模xxx的时候&#xff0c;模数等于yyy的位置aia_iai​之和。 (2)(2)(2) 给出x,yx,yx,…

miller_rabin 模板

miller_rabin 模板 ll quick_mult(ll a, ll b, ll mod) {ll ans 0;while(b) {if(b & 1) ans (ans a) % mod;a (a a) % mod;b >> 1;}return ans; }ll quick_pow(ll a, ll n, ll mod) {ll ans 1;while(n) {if(n & 1) ans quick_mult(ans, a, mod);a quick…

你不得不了解的10款服务器监控工具

监控Web服务器或Web主机的运行状况和正常运行非常重要。如果希望确保您的网站可用性在您的控制之中&#xff0c;那你就需要收集服务器各种性能数据以供分析和调整。以下是收集的常用大多数服务器监控组件解决方案。01Performance Co-PilotPerformance Co-Pilot&#xff0c;简称…

Codeforces Round #507 (Div. 1) D. You Are Given a Tree 根号分治 + dp

传送门 题意&#xff1a; 有一颗nnn个节点的树&#xff0c;其中一个简单路径集合被称为kkk合法当且仅当&#xff1a; 树的每个节点至多属于一条路径&#xff0c;且每条路径恰好包含kkk个点。 对于k∈[1,n]k\in [1,n]k∈[1,n]&#xff0c;求kkk合法路径集合最多路径个数&…

acwing199.余数之和(除法分块)

思路 要计算∑i1nk(modi)\sum _{i 1} ^ {n}k\pmod {i}∑i1n​k(modi)&#xff0c;可化简原式n∗k−∑i1nk/i∗i原式 n * k - \sum _{i 1} ^ {n} k / i * i原式n∗k−∑i1n​k/i∗i&#xff0c;显然k/ik / ik/i是一个具有块状性质的区间&#xff0c;我们给定了这个块状区间的…

2020EC-final

传送门 文章目录B - Rectangle Flip 2题意&#xff1a;思路&#xff1a;A - Namomo Subsequence题意&#xff1a;思路&#xff1a;D - City Brain题意:思路:B - Rectangle Flip 2 题意&#xff1a; 给你一个n∗mn*mn∗m的矩阵&#xff0c;接下来n∗mn*mn∗m秒每秒都会消失一个…

统一流控服务开源:基于.Net Core的流控服务

先前有一篇博文&#xff0c;梳理了流控服务的场景、业界做法和常用算法统一流控服务开源-1&#xff1a;场景&业界做法&算法篇最近完成了流控服务的开发&#xff0c;并在生产系统进行了大半年的验证&#xff0c;稳定可靠。今天整理一下核心设计和实现思路&#xff0c;开…

小A的柱状图

小A的柱状图 思路 经典的单调栈题目&#xff0c;对于每一个位置&#xff0c;我们维护他以当前高度可以到达的最左方&#xff0c;以及他当前高度可以到达的最有方&#xff0c;显然就有以他的高度的矩形块的面积就出来了&#xff0c;所以我们只需要统计n个矩形的最大值就行。 …

建筑师 第一类斯特林数

文章目录目录题意:思路&#xff1a;目录 题意: 给你一个nnn的排列&#xff0c;排列中的数代表他的高度&#xff0c;问你有多少个排列能使得从左边能看到aaa个建筑&#xff0c;从右边能看到bbb个建筑。 如果建筑iii左边没有任何比他高的&#xff0c;那么他就能看到。 1≤n≤5…

poj 3233 Matrix Power Series

Matrix Power Series 思路 题意比较简单&#xff0c;就是要求S(n)∑i1nAiS(n) \sum _{i 1} ^{n} A^ {i}S(n)∑i1n​Ai&#xff0c;显然有S(n)S(n−1)∗AAS(n) S(n - 1) * A AS(n)S(n−1)∗AA&#xff0c;看到这里&#xff0c;那就简单了&#xff0c;递推式&#xff0c;加…

.NET Core 编写 Azure Function 并连接 GitHub 持续部署

点击上方蓝字关注“汪宇杰博客”导语Azure Function 是一个事件驱动型无服务器计算平台&#xff0c;可以解决复杂的业务流程问题&#xff0c;更加高效地进行开发。在本地构建和调试&#xff0c;而无需额外的设置&#xff0c;在云中大规模部署和操作&#xff0c;并使用触发器和绑…

Codeforces Round #766 (Div. 2) D. Not Adding 数学gcd

传送门 文章目录目录题意&#xff1a;思路&#xff1a;目录 题意&#xff1a; 给你一个长度为nnn的数组&#xff0c;你每次可以选择其中的两个数&#xff0c;如果他们的gcdgcdgcd在数组中没有出现那么就可以加在数组后面构成一个新的数组&#xff0c;问数组最长是多少。 2≤n…

「数据ETL」从数据民工到数据白领蜕变之旅(五)-使用dotNET脚本实现SSIS无限扩展...

在前面一文中&#xff0c;正式引出了SSIS专业数据ETL工具&#xff0c;笔者仅能作引路作用&#xff0c;未能使用文章的方式给大家写出更多的入门级的文章&#xff0c;希望读者们可以自行根据分享的学习资源自行完成入门及进阶的学习。同时也想给大家分享到SSIS的能力边界性&…

P3067 [USACO12OPEN]Balanced Cow Subsets G 折半搜索

传送门 文章目录目录题意&#xff1a;思路&#xff1a;目录 题意&#xff1a; 给你nnn个数&#xff0c;从中任意选出一组数&#xff0c;使这些数能分成和相等的两组&#xff0c;问有多少种选数方案。 2≤n≤20,1≤ai≤1e92\le n\le 20,1\le a_i\le 1e92≤n≤20,1≤ai​≤1e9 …

poj 2191 Mersenne Composite Numbers

思路 用pollard_rho miller_rabin来拆分数字&#xff0c;如果得到的质因子大于等于2的话就按照格式输出&#xff0c;否则就不是我们想要的梅森素数。 代码 /*Author : lifehappy */ // #pragma GCC optimize(2) // #pragma GCC optimize(3) // #include <bits/stdc.h>…

数据结构为什么那么难?

来源 | 异步 | 文末赠书2017年8月&#xff0c;本着让更多的人轻松学习算法的初心&#xff0c;我写作了第一本书《趣学算法》&#xff0c;该书在出版后受到广大读者一致好评&#xff0c;在一年内重印了10次&#xff0c;并输出了繁体版的版权。一位读者对我说&#xff0c;读这本书…

书籍推荐:《C#7.0本质论》

在dotNet平台中有多种开发语言可以使用&#xff0c;C#无疑是其中应用得最为广泛的。学习一门编程语言最好的方式就是找一本好书系统地学习&#xff0c;我读过的关于C#的书籍中&#xff0c;我认为下面三本最为经典&#xff1a;《C#本质论》&#xff1a;入门类&#xff0c;目前最…