Remainder Problem(根号分治)

Educational Codeforces Round 71 (Rated for Div. 2)

F. Remainder Problem

题目链接


F. Remainder Problem

题意:

给你一个由 500000 500000 500000 个整数(编号从 1 1 1 500000 500000 500000 )组成的数组 a a a 。最初 a a a 中的所有元素都为零。

您必须对这个数组进行两种类型的查询:

  • 1 1 1 x x x y y y - a x a_x ax 增加 y y y
  • 2 2 2 x x x y y y - 计算 ∑ i ∈ R ( x , y ) a i \sum\limits_{i \in R(x, y)} a_i iR(x,y)ai ,其中 R ( x , y ) R(x, y) R(x,y) 是所有从 1 1 1 500000 500000 500000 有模 x x x 同余 y y y 的整数的集合。

你能处理所有的查询吗?

思路:

很好的一道根号分治题,类似的还有这道 F. Sum of Progression 。题解的F题

操作 1 1 1 好说,看操作 2 2 2 如何实现。发现其实就是求 ∑ a i ∗ x + y \sum a_{i*x+y} aix+y 形式的数,对这种形式,大佬说:
在这里插入图片描述

当步长 x x x 很大的时候,我们其实枚举不了几次就会到边界 n n n ,因此 x x x 很大的时候直接枚举。而当 x x x 比较小的时候,我们可以提前处理出结果。这里把起始位置为 j j j ,步长为 i i i 的这一系列位置上的数的和设为 s [ i ] [ j ] s[i][j] s[i][j],这样操作 1 1 1 修改的时候只需要枚举步长 i i i,给所有 s [ i ] [ x % i ] s[i][x\%i] s[i][x%i] y y y 就可以维护住了。

而这个分界点就取为 n \sqrt n n ,当 x ≥ n x\ge\sqrt n xn 时,就用第一种枚举求和的方式来算。否则就直接查询 s [ i ] [ j ] s[i][j] s[i][j]。这样每次暴力枚举的次数不会超过 n \sqrt n n ,而每次修改的时候维护 s s s 数组时枚举的步长也只需要枚举 n \sqrt n n 次。总的时间复杂度就是枚举的复杂度加上维护 s s s 数组的复杂度,总的复杂度不会超过 q n q\sqrt n qn

为什么分界点取为 n \sqrt n n ?证明只需要用均值不等式就可以了。最坏情况显然是要么操作 1 1 1 修改,要么操作 2 2 2 使用枚举方式查询答案。如果分界点选为 t t t 最优,假设操作 1 1 1 x x x 次,那么操作 2 2 2 q − x q-x qx 次。总的操作次数是 x ∗ t + ( q − x ) ∗ n t x*t+(q-x)*\frac nt xt+(qx)tn,因为算最坏的情况,因此需要 t = n t t=\frac nt t=tn,否则就会按着用时最多的操作 a l l   i n all\ in all in,因此就有了 t = n t=\sqrt n t=n ,总的时间复杂度就是 x ∗ n + ( q − x ) ∗ n = q ∗ n x*\sqrt n+(q-x)*\sqrt n=q*\sqrt n xn +(qx)n =qn

code:

#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
const int n=5e5;
const int sqn=710;

int t,x,y;
ll a[n+5],s[sqn+5][sqn+5];//初值 步长

int main(){
	int _;
	cin>>_;
	while(_--){
		scanf("%d%d%d",&t,&x,&y);
		if(t&1){
			a[x]+=y;
			for(int i=1;i<sqn;i++)
				s[i][x%i]+=y;
		}
		else {
			if(x>=sqn){
				ll ans=0;
				for(int i=y;i<=n;i+=x)ans+=a[i];
				printf("%lld\n",ans);
			}
			else {
				printf("%lld\n",s[x][y]);
			}
		}
	} 
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JavaEE】网络原理: HTTPS协议相关内容

目录 HTTPS 是什么 HTTPS 的工作过程 对称加密 非对称加密 引入证书 理解数据签名 通过证书解决黑客攻击 HTTPS 是什么 HTTPS也是一个应用层协议, 是在HTTP协议的基础上引入了一个加密层. HTTP协议内容都是按照文本的方式明文传输的, 这就导致在传输过程中出现一些被篡…

minHash(最小哈希)和LSH(局部敏感哈希)

在数据挖掘中,有一个比较基本的问题,就是比较两个集合的相似度。关于这个问题,最笨的方法就是用一个两重循环来遍历这两个集合中的所有元素,进而统计这两个集合中相同元素的个数。但是,当这两个集合里的元素数量非常庞大时,同时又有很多个集合需要判断两两之间的相似度时…

代码随想录算法训练营第二十三天| 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

文章目录 [1.修剪二叉搜索树(https://leetcode.cn/problems/trim-a-binary-search-tree/description/)2.将有序数组转换为二叉搜索树3.把二叉搜索树转换为累加树 [1.修剪二叉搜索树(https://leetcode.cn/problems/trim-a-binary-search-tree/description/) 遇到超范围节点&…

论文精读--GPT3

不像GPT2一样追求zero-shot&#xff0c;而换成了few-shot Abstract Recent work has demonstrated substantial gains on many NLP tasks and benchmarks by pre-training on a large corpus of text followed by fine-tuning on a specific task. While typically task-agnos…

探究前端路由hash和history的实现原理(包教包会)

今天我们来讲一讲前端中很重要的一个部分路由&#xff08;router&#xff09;&#xff0c;想必前端小伙伴对‘路由’一词都不会感到陌生。但是如果哪天面试官问你&#xff0c;能大概说一说前端路由的实现原理吗&#xff1f; 你又会如何应对呢&#xff1f; 今天勇宝就带着大家一…

Educational Codeforces Round 160 (Rated for Div. 2) D. Array Collapse(笛卡尔树+DP)

原题链接&#xff1a;D. Array Collapse 题目大意&#xff1a; 给你一个长度为 n n n 的排列 p p p &#xff0c;排列的定义为 [ 1 , 2 , 3 , . . , n ] [1,2,3,..,n] [1,2,3,..,n] 中每个数都出现 恰好 一次。 你可以做 任意多次 这样的操作&#xff1a; 选出一个任意长度…

8万就能买混动!秦PLUS、启源A05、帝豪L Hi-P谁值得买?

文 | AUTO芯球 作者 | 雷歌 你可以不买比亚迪&#xff0c;但一定要感谢比亚迪。 比亚迪凭着一己之力&#xff0c;将整个混动汽车的价格降到了7万元时代。 秦PLUS价格自9.98万直降2万来到7.98万后&#xff0c;它的直接竞争对手们开始降价&#xff0c;长安启源A05混动降至7.8…

Linux提权—服务漏洞,以MySQL-UDF提权为例

UDF(user defined function&#xff0c;用户自定义函数) 利用条件&#xff1a; 有对MySQL数据库进行创建&#xff0c;插入&#xff0c;删除的权限 secure_file_priv为空 利用过程 secure_file_priv的值为空或者是我们恰巧需要用到的目录&#xff0c;如下&#xff1a; 提权成…

数学建模论文、代码百度网盘链接

1.[2018中国大数据年终总决赛冠军] 金融市场板块划分与轮动规律挖掘与可视化问题 2.[2019第九届MathorCup数模二等奖] 数据驱动的城市轨道交通网络优化策略 3.[2019电工杯一等奖] 露天停车场停车位的优化设计 4.[2019数学中国网络数模一等奖] 基于机器学习的保险业数字化变革…

C#通过泛型方法的重载分别调用主窗体和提示窗体

目录 一、涉及到的知识点 1.泛型方法的重载 2.使用泛型更好地实现通用化 二、示例&#xff1a;泛型方法及其重载 1.源码 2. 生成效果 实际开发项目时&#xff0c;有时会因为调用窗体或提示窗体过多&#xff0c;而难于管理&#xff0c;这时&#xff0c;可以通过泛型方法的…

关于 REST API,你了解多少?

什么是 REST API REST 是 REpresentational State Transfer 的缩写&#xff0c;是分布式超媒体系统的架构风格。Roy Fielding 于 2000 年在他的著名论文中首次提出了这一点。从那时起&#xff0c;它已成为构建基于 Web 的 API&#xff08;应用程序编程接口&#xff09;的最广泛…

保障工作效率!实时监管员工工作微信

随着移动办公的普及&#xff0c;员工使用微信进行工作沟通已成为常态。为了实时监管员工工作微信&#xff0c;企业可以通过个微管理系统来提高效率并确保合规&#xff1a; 给员工分配微信子账号 企业管理者可以直接在系统上给员工分配子账号&#xff0c;并轻松查看子账号的工…

leetcode hot100 买卖股票的最佳时机二

注意&#xff0c;本题是针对股票可以进行多次交易&#xff0c;但是下次买入的时候必须保证上次买入的已经卖出才可以。 动态规划可以解决整个股票买卖系列问题。 dp数组含义&#xff1a; dp[i][0]表示第i天不持有股票的最大现金 dp[i][1]表示第i天持有股票的最大现金 递归公…

ElasticSearch之bool多条件查询

写在前面 在实际的业务场景中&#xff0c;不可能只是简单的单值查询 &#xff0c;更多的是n个条件的综合查询&#xff0c;就像下面的搜索&#xff1a; 针对这种场景我们就需要依赖于bool查询了&#xff0c;本文就一起来看下这部分的内容。 1&#xff1a;bool查询介绍 bool查…

在github的README.md中插入视频;在github的README.md中添加gif演示动画

最近需要再github中上传项目的源代码&#xff0c;应导师的要求&#xff0c;需要再README中加入对实验视频的展示&#xff0c;但是github的README.md其实就是一个markdown文件&#xff0c;据我的理解这个文件里应该无法直接插入视频吧&#xff1f;&#xff08;如果后续有办法直接…

python中的类与对象(2)

目录 一. 类的基本语法 二. 类属性的应用场景 三. 类与类之间的依赖关系 &#xff08;1&#xff09;依赖关系 &#xff08;2&#xff09;关联关系 &#xff08;3&#xff09;组合关系 四. 类的继承 一. 类的基本语法 先看一段最简单的代码&#xff1a; class Dog():d_…

Python Web开发记录 Day3:BootStrap

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 三、BootStrap1、BootStrap-初体验2、BootStrap…

Inno setup 打包jar包+前端dist+mysql+navicat等应用文件操作

目录 一、 使用exe4j将后端jar包打包成exe应用文件 1.创建一个新的工程 2.选择一个你想要存放的路径 3.进入配置界面 4.选择jar转换exe模式 5.自定义名字和选择输出路径 6.配置初始化 7.配置java环境 8.测试运行结果 二、Inno 打包应用文件exe 1.新建一个工程文件 2…

前端取图片相同颜色作为遮罩或者背景

需求 遮罩层取图片相同/相似的颜色作为遮罩 效果 做法 npm库 grade.js 所提供图像中前 2 个主色生成的互补渐变https://github.com/benhowdle89/grade COLOR THIEF 只需使用Javascript即可从图像中获取调色板。 https://github.com/lokesh/color-thief https://lokeshd…