cf1553F. Pairwise Modulo

cf1553F. Pairwise Modulo

题意:

给你一个数组a,a由n个不同的数组成,让你求出对应的数组p
数组p的定义为:
pk=∑1≤i,j≤kaimodajp_{k}=\sum_{1\leq i,j\leq k}a_{i} \mod a_{j}pk=1i,jkaimodaj

题解:

官方题解
首先我们需要拜托mod操作,一个常用公式:
xmody=x−y∗⌊xy⌋x \mod y = x - y * \lfloor \frac{x}{y} \rfloorxmody=xyyx
直接求p比较麻烦,我们规定i,j一个先后顺序,我们将pkp_{k}pk分成sks_{k}sktkt_{k}tk两个部分
sk=∑1≤i,j≤k,i>jaimodajs_{k}=\sum_{1\leq i,j\leq k,i>j}a_{i} \mod a_{j}sk=1i,jk,i>jaimodaj
tk=∑1≤i,j≤k,i<jaimodajt_{k}=\sum_{1\leq i,j\leq k,i<j}a_{i} \mod a_{j}tk=1i,jk,i<jaimodaj
也就是sks_{k}sk求的是编号大的数mod编号小的数的和,tkt_{k}tk则正好相反。
怎么求sks_{k}sk?
sk=sk−1+∑i=1k−1akmodai=sk−1+∑i=1k−1(ak−ai∗⌊akai⌋)s_{k}=s_{k-1}+\sum_{i=1}^{k-1}a_{k} \mod a_{i}=s_{k-1}+\sum_{i=1}^{k-1}(a_{k}-a_{i}*\lfloor\frac{a_{k}}{a_{i}} \rfloor)sk=sk1+i=1k1akmodai=sk1+i=1k1(akaiaiak)
我们将aka_{k}ak提出来会得到:
sk=sk−1+ak∗(k−1)−∑i=1k−1(ai∗⌊akai⌋)s_{k}=s_{k-1}+a_{k}*(k-1)-\sum_{i=1}^{k-1}(a_{i}*\lfloor \frac{a_{k}}{a_{i}} \rfloor)sk=sk1+ak(k1)i=1k1(aiaiak)
现在问题就是∑i=1k−1(ai∗⌊akai⌋)\sum_{i=1}^{k-1}(a_{i}*\lfloor \frac{a_{k}}{a_{i}} \rfloor)i=1k1(aiaiak)咋求
我们现在开始确定aia_{i}ai,然后看其对所有sks_{k}sk,k>i的贡献

  1. 对于所有的aka_{k}ak[ai,2∗ai)[a_{i},2*a_{i})[ai,2ai)贡献是−ai-a_{i}ai
  2. 对于所有的aka_{k}ak[2∗ai,3∗ai)[2*a_{i},3*a_{i})[2ai,3ai)贡献是−2∗ai-2*a_{i}2ai
  3. 对于所有的aka_{k}ak[d∗ai,(d+1)∗ai)[d*a_{i},(d+1)*a_{i})[dai,(d+1)ai)贡献是−d∗ai-d*a_{i}dai

这意味着可以强制所有合法的d并执行类似这样的更新:将x添加到范围[l,r]中的所有数字。这可以用线段树或树状数组
tkt_{k}tk的求法也超不多,但是有区别
在这里插入图片描述

时间复杂度:
M最大是3e5,每一次加一数进去会进行Mai\frac{M}{a_{i}}aiM次修改,而aia_{i}ai各不相同,所以M1+...+Mn=O(logn)\frac{M}{1}+...+\frac{M}{n}=O(logn)1M+...+nM=O(logn)
所以有O(M logn)更新操作,每次更新是O(log M),总复杂度为O(M log M log n)
代码中我维护了两个树状数组A和B

代码:

// Problem: F. Pairwise Modulo
// Contest: Codeforces - Harbour.Space Scholarship Contest 2021-2022 (open for everyone, rated, Div. 1 + Div. 2)
// URL: https://codeforces.com/contest/1553/problem/F
// Memory Limit: 256 MB
// Time Limit: 4000 ms
// Data:2021-08-10 16:23:05#include <bits/stdc++.h>
#include <unordered_map>
#define debug(a, b) printf("%s = %d\n", a, b);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
clock_t startTime, endTime;
//Fe~Jozky
const ll INF_ll= 1e18;
const int INF_int= 0x3f3f3f3f;
template <typename T> inline void read(T& x)
{T f= 1;x= 0;char ch= getchar();while (0 == isdigit(ch)) {if (ch == '-')f= -1;ch= getchar();}while (0 != isdigit(ch))x= (x << 1) + (x << 3) + ch - '0', ch= getchar();x*= f;
}
template <typename T> inline void write(T x)
{if (x < 0) {x= ~(x - 1);putchar('-');}if (x > 9)write(x / 10);putchar(x % 10 + '0');
}
void rd_test()
{
#ifdef ONLINE_JUDGE
#elsestartTime= clock();freopen("in.txt", "r", stdin);
#endif
}
void Time_test()
{
#ifdef ONLINE_JUDGE
#elseendTime= clock();printf("\nRun Time:%lfs\n", (double)(endTime - startTime) / CLOCKS_PER_SEC);
#endif
}
const int maxn= 3e5 + 9;
const int M= 3e5;
struct Fenw
{ll w[maxn];Fenw(){fill(w + 1, w + maxn, 0ll);}ll lowbit(ll x){return x & (-x);}void update(int pos, ll x){for (; pos <= M; pos+= lowbit(pos)) {w[pos]+= x;}}ll get(int pos){ll res= 0;for (; pos > 0; pos-= lowbit(pos)) {res+= w[pos];}return res;}ll get(int l, int r){return get(r) - get(l - 1);}
} A, B;
void solve()
{int n;cin >> n;//A维护的是ak对[k+1,n],B维护的是区间[1,k-1]对ak的贡献ll pre= 0, ans= 0;//debug("测试", 1);for (int i= 1; i <= n; i++) {int x;cin >> x;ans+= x * (i - 1ll); //加的skans-= A.get(x); //s_2ans+= pre; //加的tkpre+= x;//debug("测试", 1);for (int j= x; j <= M; j+= x) {int l= j, r= min(M, j + x - 1); //枚举每个区间ans-= B.get(l, r) * j; //t_2A.update(l, x);//在l位置上加x}B.update(x, 1);printf("%lld ", ans);}printf("\n");
}
int main()
{//rd_test();solve();return 0;//Time_test();
}

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

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

相关文章

Abp框架准备加入.NET Foundation

Abp团队正准备尝试将Abp项目加入.NET Foundation!既然申请了,必然有很大的自信能够成功,请大家等待好消息!Abp中文网会第一时间跟进.点击阅读原文查看最新进展.

[ZJOI2014] 璀璨光华(bfs建图 + dfs搜索)

problem luogu-P3342 solution 你感觉这道题没考什么&#xff0c;又感觉考了什么 通过样例以及题面&#xff0c;我们并未获取到『立方体每个小方块的编号是按一定规则命名』的信息。 也就是说&#xff0c;我们需要通过输入的每个小方块相邻的编号的信息来建出这个立方体的…

SignalR 中丰富多彩的消息推送方式

在上一篇 SignalR 文章中&#xff0c;演示了如何通过 SignalR 实现了简单的聊天室功能&#xff1b;本着简洁就是美的原则&#xff0c;这一篇我们也来聊聊在 SignalR 中的用户和组的概念&#xff0c;理解这些基础知识有助于更好的开发基于 SignalR 的应用&#xff0c;通过对用户…

Visual Studio 2019 使用 Live Share

一.前言Visual Studio 2019 在今天发布&#xff08;北京时间&#xff09;了&#xff0c;这次带来了一个比较有趣的 Live Share 功能&#xff0c;使用它可以进行更好的协作开发。主要功能&#xff1a;更多资料可看官方介绍&#xff1a;Visual Studio 实时共享什么是Visual Studi…

cf1523B. Lord of the Values

cf1523B. Lord of the Values 题意&#xff1a; 给你一个数组&#xff0c;有n个数&#xff0c;n为偶数&#xff0c;a1&#xff0c;a2…an 现在有两个操作&#xff1a; 对于i<j 操作1&#xff1a;aiaiaj 操作2&#xff1a;ajaj-ai 把原数组转换为-a1,-a2,-a3… 题解&#…

Asp.Net Core WebAPI使用Swagger时API隐藏与分组

1、前言为什么我们要隐藏部分接口&#xff1f;因为我们在用swagger代替接口的时候&#xff0c;难免有些接口会直观的暴露出来&#xff0c;比如我们结合Consul一起使用的时候&#xff0c;会将健康检查接口以及报警通知接口暴露出来&#xff0c;这些接口有时候会出于方便考虑&…

为您的机器配置开发环境

软件准备在本期视频中&#xff0c;我们将安装所序言的软件&#xff0c;并为我们的电脑配置.NET Core开发环境。我们需要安装如下2个软件&#xff1a;一个编辑器.NET Core SDK&#xff08;Software Development Kit&#xff09;下载并安装.NET Core 开发编辑器我的是Windows操作…

[CQOI2012] 局部极小值(状压DP + 容斥 + 搜索)

problem luogu-P3160 solution 这么小的数据范围&#xff0c;非暴力不状压。暴力 O(28!)O(28!)O(28!) 呵呵呵可以拉走了。 我们不妨从小到大填数字&#xff0c;这样如果局部极小值点还没有填的话&#xff0c;周围的九宫格就一定不能被填。 设 dp(s,i):dp(s,i):dp(s,i): 局…

基于Kubernetes 构建.NET Core 的技术体系

很多公司技术支持岗位的工作&#xff0c;如配置域名&#xff0c;部署环境&#xff0c;修改复位配置&#xff0c;服务重启&#xff0c;扩容缩容&#xff0c;梳理和完善监控&#xff0c;根据开发的需要查找日志等工作&#xff0c;需要和开发进行大量的沟通&#xff0c;如什么是外…

[CQOI2014] 危桥(网络流)

problem luogu-P3163 solution 这是一道网络流好题&#xff0c;看的着摸不着吃不着。 初读完题&#xff0c;就知道这是一道“脱光了”的最大流。 建图基础版本&#xff1a; 建立额外源汇点。 无向边相同于两条有向边&#xff0c;直接建不影响&#xff0c;危桥流量设成 22…

那些优秀的开发者----汪宇杰:从重视细节,到成就技术专家

汪宇杰&#xff08;Edi Wang&#xff09;&#xff0c;.NET及Windows开发者&#xff0c;2018-2019年度微软最有价值专家&#xff08;Windows Development方向&#xff09;。现担任某金融科技企业的网站开发工程师。他对微软技术有鉴定的信念和不灭的热情&#xff0c;曾在Windows…

P4062 [Code+#1]Yazid 的新生舞会(线段树做法)

P4062 [Code#1]Yazid 的新生舞会&#xff08;线段树做法&#xff09; 题意&#xff1a; 给你一个序列a[1…n]​&#xff0c;求存在绝对众数的子区间个数。 绝对众数指&#xff1a;区间中出现次数最多的那个数&#xff0c;出现次数严格大于区间长度的一半。 题解&#xff1a…

《从零开始学ASP.NET CORE MVC》课程介绍

大家好&#xff0c;欢迎来到52ABP学院&#xff0c;收看我们的 《从零开始学ASP.NET CORE MVC》。ASP.NET Core 简介从2015年开始随时互联网成长&#xff0c;云计算和AI、大数据的爆发&#xff0c;大家从谈论项目信息化到数字化的转型&#xff0c;从ToC产业到ToB产业的转型&…

Docker - 容器部署 Consul 集群

目录 准备 Consul 镜像安装单个 Consul组装集群 Consul启动 Consul 和 Web 管理器Consul 命令简单介绍Web 管理器Server 加入集群Client 加入集群了解 ConsulConsul 使用场景Consul 优势Consul 中的概念说明简介安装总结引用和附件说明本文主要介绍怎么使用 Docker 在 Linux…

VS2017创建ASP.NET Core Web程序

创建ASP.NET Core Web应用程序如果您使用的是VS2019 请看 VS2019创建ASP.NET Core Web程序在这个视频中我们将讨论可用的不同项目模板及其功能预制的项目模板有什么不同&#xff0c;哪些是可以使用的&#xff0c;以及他们的作用。在Visual Studio2017中创建新的ASP.NET Core 项…

巧用linux版powershell,管理linux下的docker

owershell,docker,cli,命令,docker ps,docker image第一章 在linux中搭建docker环境目的&#xff1a;在任意版本的linux&#xff08;物理机&#xff0c;虚拟机&#xff0c;节点机&#xff09;中&#xff0c;安装docker服务。动作&#xff1a;教程略&#xff0c;不是本文主要目的…

从ASP.NET Core2.2到3.0你可能会遇到这些问题

趁着假期的时间所以想重新学习下微软的官方文档来巩固下基础知识。我们都知道微软目前已经发布了.NET Core3.0的第三个预览版&#xff0c;同时我家里的电脑也安装了vs2019。So&#xff0c;就用vs2019.NET Core3.0来跟着做一下Contoso University这个WEB应用&#xff0c;但是在基…

EntityFramework Core 3.0 Preview

前段时间.Net Core 3.0 发布了&#xff0c;Entity Framework Core 3.0 也发布了Preview版。假期用了一上午大致研究了一遍&#xff0c;同时又体验了一把Visual Studio 2019。总结一下分享给大家&#xff1a;VS2019 新建.Net Core 3.0 Console应用&#xff0c;添加EFCore相关的N…

机器学习 ML.NET 发布 1.0 RC

ML.NET 是面向.NET开发人员的开源和跨平台机器学习框架&#xff08;Windows&#xff0c;Linux&#xff0c;macOS&#xff09;,通过使用ML.NET,.NET开发人员可以利用他们现有的工具和技能组&#xff0c;为情感分析&#xff0c;推荐&#xff0c;图像分类等常见场景创建自定义机器…

容器化时代我们应当选择Kubernetes

昨天发的文章《基于Kubernetes 构建.NET Core 的技术体系》&#xff0c;有同学问.NET Core上有Spring Cloud类似的平台吗&#xff1f; .NET Core出现这么久了&#xff0c;这个为云原生应用开发而准备的系统需要Spring cloud这样的全家桶吗&#xff1f; 大家希望使用Spring Clou…