简要题意

你需要维护一个长度为 \(n\) 的序列 \(v\),支持:

  • A x y 求整个序列中,所有模 \(x\) 为 \(y\) 的下标的元素的值,即:
\[\sum_{i=0}^{\lfloor(n-y)\div x\rfloor}v_{ix+y}
\]
  • C x y,将 \(v_x\) 修改为 \(y\)。

思路

根号分治是一种玄学的暴力优化,如果一道题的暴力有很多种写法,且每一种写法有自己独特的优势(如大值较快,小值较快等),则可以考虑根号分治。

比如说这道题,有两种方法:

  • 直接暴力找序列中模 \(x\) 为 \(y\) 的所有下标,并把它们加起来。这样子大的 \(x\) 跑得快,小的值跑得慢。
  • 预处理,小 \(x\) 较快,大的 TLE/MLE。

我们可以议定一个界 \(R\),使得 \(x>R\) 的选择暴力,小于等于 \(R\) 的预处理。这里,\(R=\sqrt{n}\) 时较优。

总结:根号分治就是选择暴力方法,扬长避短,用暴力乱踩正解!

代码

#include <bits/stdc++.h>
#define int long long
using namespace std; int n,m;
int a[1500005],f[500][500];
int bl; signed main(){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
bl=sqrt(n);
for(int i=1;i<=n;i++){
for(int j=1;j<=bl;j++){
f[j][i%j]+=a[i];
}
}
while(m--){
char op;int x,y;
cin>>op>>x>>y;
if(op=='A'){
if(x<=bl){
cout<<f[x][y]<<'\n';
}
else{
int ans=0;
for(int i=y;i<=n;i+=x){
ans+=a[i];
}
cout<<ans<<'\n';
}
}
else{
for(int i=1;i<=bl;i++){
f[i][x%i]+=(y-a[x]);
}
a[x]=y;
}
}
return 0;
}

根号分治简单笔记 | P3396 哈希冲突的更多相关文章

  1. 洛谷P3396 哈希冲突 (分块)

    洛谷P3396 哈希冲突 题目背景 此题约为NOIP提高组Day2T2难度. 题目描述 众所周知,模数的hash会产生冲突.例如,如果模的数p=7,那么4和11便冲突了. B君对hash冲突很感兴趣. ...

  2. 洛谷 P3396 哈希冲突 解题报告

    P3396 哈希冲突 题目背景 此题约为NOIP提高组Day2T2难度. 题目描述 众所周知,模数的hash会产生冲突.例如,如果模的数p=7,那么4和11便冲突了. B君对hash冲突很感兴趣.他会 ...

  3. P3396 哈希冲突(思维+方块)

    题目 P3396 哈希冲突 做法 预处理模数\([1,\sqrt{n}]\)的内存池,\(O(n\sqrt{n})\) 查询模数在范围里则直接输出,否则模拟\(O(m\sqrt{n})\) 修改则遍历 ...

  4. P3396 哈希冲突

    很好的根号算法(这种思想好像叫根号分治?) 首先,暴力是Ο(n2)的 考虑预处理: for(p=1;p<=n;p++) //枚举模数 ans[p][i%p]+=value[i]; 看似很好但还是 ...

  5. 【Luogu】P3396哈希冲突(根号算法)

    题目链接 根号算法真的是博大精深啊……明明是暴力但复杂度就是能过 这也太强了吧!!! 预处理出p<=sqrt(n)的所有情况,耗时n根n 查询: 如果p<=根n,O1查表 如果p>= ...

  6. 洛谷P3396 哈希冲突

    分块还真是应用广泛啊...... 题意:求 解:以n0.5为界. 当p小于n0.5的时候,直接用p²大小的数组储存答案. 预处理n1.5,修改n0.5. 当p大于n0.5的时候,直接按照定义计算,复杂 ...

  7. p3396 哈希冲突(暴力)

    想了好久,没想到优秀的解法,结果是个暴力大吃一静.jpg 分类讨论,预处理\(p\le \sqrt{n}\) 的情况,其他直接暴力,复杂度\(O(n \sqrt{n} )\) #include < ...

  8. 洛谷P3396哈希冲突

    传送门啦 非常神奇的分块大法. 这个题一看数据范围,觉得不小,但是如果我们以 $ \sqrt(x) $ 为界限,数据范围就降到了 $ x < 400 $ 我们设数组 $ f[i][j] $ 表示 ...

  9. 洛谷P3396 哈希冲突(分块)

    传送门 题解在此,讲的蛮清楚的->这里 我就贴个代码 //minamoto #include<iostream> #include<cstdio> #include< ...

  10. luogu P3396 哈希冲突(分块?)

    我们可以维护一个\(f[i][j]\)代表%\(i\)意义下得\(j\)的答案.然后维护就炸了. 先设\(x=\sqrt{n}\)然后我们发现,当\(i>x\)时我们直接暴力复杂度为\(O(x) ...

随机推荐

  1. 【JavaSE】面向对象三大特征——封装、继承、多态

    前言:本文主要介绍思想 封装 封装这一概念并不仅存在与面向对象中,甚至说封装这一概念不仅限于编程中,其实生活中的封装无处不在.比如 需求:你到银行取钱 参数:你只需要提供银行卡和密码 返回值:柜员会将 ...

  2. 六、模型层(ORM)

    六.模型层(ORM) Django中内嵌了ORM框架,不需要直接编写SQL语句进行数据库操作,而是通过定义模型类,操作模型类来完成对数据库中表的增删改查和创建等操作. O是object,也就类对象的意 ...

  3. LoadRunner11使用代理录制脚本

    一.背景 电脑安装了LoadRunner11,在进行脚本录制时发现录制的脚本为空,即录制时事件为0,也没有自动调出对应的浏览器:如下图: 问了度娘,发现LR11要成功录制脚本,对各浏览器的版本有要求! ...

  4. 成熟企业级开源监控解决方案Zabbix6.2关键功能实战-下

    @ 目录 实战 Zabbix server源码安装使用示例 部署 配置 Zabbix agent2使用示例 部署 配置 Zabbix proxy使用示例 部署 配置 自定义监控使用示例 触发器使用示例 ...

  5. Java安全之Mojarra JSF反序列化

    Java安全之Mojarra JSF反序列化 About JSF JavaServer Faces,新一代的Java Web应用技术标准,吸收了很多Java Servlet以及其他的Web应用框架的特 ...

  6. Spring Security(3)

    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来- 前面运行写好的代码之所以没有任何显示,是因为还没有对Spring Security进行配置,当然啥也不显示了.这就好比你坐在车上,却不打开发动机 ...

  7. 本地JS文件批量压缩

    最近在维护一个小后台项目,有段JS需要压缩上传到CDN存储服务器.由于之前压缩的JS文件都比较少,都是手动压缩的.这次需要压缩的文件比较多,所以用了批量压缩.特此记录一下,方便大家和自己以后再用到的时 ...

  8. oracle 分析函数——ration_to_report 求占有率(百分比)

    oracle 的分析函数有很多,但是这个函数总是会忘记,我想通过这种方式能让自己记起来,不至于下次还要百度. 创表.表数据(平时练手的表): prompt PL/SQL Developer impor ...

  9. Day27:异常详解

    异常 1.1 异常概述 异常(Exception)指程序运行中出现的不正常情况:文件找不到.网络异常.非法参数等等. 我们通过代码来了解一下: public class Demo{ public st ...

  10. Golang反射获得变量类型和值

    1. 什么是反射 反射是程序在运行期间获取变量的类型和值.或者执行变量的方法的能力. Golang反射包中有两对非常重要的函数和类型,两个函数分别是: reflect.TypeOf 能获取类型信息re ...