【Luogu】P3396哈希冲突(根号算法)
根号算法真的是博大精深啊……明明是暴力但复杂度就是能过
这也太强了吧!!!
预处理出p<=sqrt(n)的所有情况,耗时n根n
查询:
如果p<=根n,O1查表
如果p>=根n,因为只有小于根n个数对答案有贡献,所以枚举,耗时根n
修改:
因为单点修改,直接修改1~size所有的情况,耗时根n
然后这个暴力一般的暴力就卡过了!!!!!
这也 太强 了 吧!!!!
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cctype>
#include<cmath>
#define maxn 160000
#define sqtn 400
using namespace std; inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} long long s[sqtn][maxn],q[maxn];
int sqt;
inline void update(int i,int v){
for(int j=;j<=sqt;++j) s[j][i%j]=s[j][i%j]-q[i]+v;
q[i]=v;
} int main(){
int n=read(),m=read();
for(int i=;i<=n;++i) q[i]=read();
sqt=sqrt(n);
for(int i=;i<=n;++i)
for(int j=;j<=sqt;++j) s[j][i%j]+=q[i];
for(int i=;i<=m;++i){
char c[];int x,y;
scanf("%s%d%d",c,&x,&y);
if(c[]=='A'){
if(x<=sqt) printf("%lld\n",s[x][y]);
else{
long long ans=;
for(int j=y;j<=n;j+=x) ans+=q[j];
printf("%lld\n",ans);
}
}
else update(x,y);
}
return ;
}
【Luogu】P3396哈希冲突(根号算法)的更多相关文章
- luogu P3396 哈希冲突(分块?)
我们可以维护一个\(f[i][j]\)代表%\(i\)意义下得\(j\)的答案.然后维护就炸了. 先设\(x=\sqrt{n}\)然后我们发现,当\(i>x\)时我们直接暴力复杂度为\(O(x) ...
- 洛谷P3396 哈希冲突 (分块)
洛谷P3396 哈希冲突 题目背景 此题约为NOIP提高组Day2T2难度. 题目描述 众所周知,模数的hash会产生冲突.例如,如果模的数p=7,那么4和11便冲突了. B君对hash冲突很感兴趣. ...
- 洛谷 P3396 哈希冲突 解题报告
P3396 哈希冲突 题目背景 此题约为NOIP提高组Day2T2难度. 题目描述 众所周知,模数的hash会产生冲突.例如,如果模的数p=7,那么4和11便冲突了. B君对hash冲突很感兴趣.他会 ...
- P3396 哈希冲突(思维+方块)
题目 P3396 哈希冲突 做法 预处理模数\([1,\sqrt{n}]\)的内存池,\(O(n\sqrt{n})\) 查询模数在范围里则直接输出,否则模拟\(O(m\sqrt{n})\) 修改则遍历 ...
- P3396 哈希冲突
很好的根号算法(这种思想好像叫根号分治?) 首先,暴力是Ο(n2)的 考虑预处理: for(p=1;p<=n;p++) //枚举模数 ans[p][i%p]+=value[i]; 看似很好但还是 ...
- P 3396 哈希冲突 根号分治
Link 据说这是一道论文题????.具体论文好像是 集训队论文<根号算法--不只是分块> 根号分治的裸题. 首先我们考虑暴力怎么打. 先预处理出每个模数的答案,之后再 O(1) 的回答, ...
- luogu 3396 哈希冲突 奇怪的根号
这个题嘛开始一看实在想不出来有什么数据结构/算法可以乱搞,于是果断写了个朴素n方暴力,然后就发现luogu竟然有91分 这数据啊,也是醉了.. 想着优化优化能不能暴力卡过最后一个T掉的点,然鹅发现无耶 ...
- 洛谷P3396 哈希冲突
分块还真是应用广泛啊...... 题意:求 解:以n0.5为界. 当p小于n0.5的时候,直接用p²大小的数组储存答案. 预处理n1.5,修改n0.5. 当p大于n0.5的时候,直接按照定义计算,复杂 ...
- p3396 哈希冲突(暴力)
想了好久,没想到优秀的解法,结果是个暴力大吃一静.jpg 分类讨论,预处理\(p\le \sqrt{n}\) 的情况,其他直接暴力,复杂度\(O(n \sqrt{n} )\) #include < ...
随机推荐
- MFC【exe】工程中的文件大致信息(翻译的)
在工程文件夹中有个readme文件,下面是翻译过来的. ======================================================================== ...
- 101个MySQL的调节和优化技巧
MySQL是一个功能强大的开源数据库.随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限.这里是101条调节和优化MySQL安装的技巧.一些技巧是针对特定的安装环境的,但这些思 ...
- UVALive 3983 Robotruck (单调队列,dp)
如果状态定义为序号和重量的话,决策就是下一个垃圾捡或者不减,但是状态数太多了. 如果只定义序号作为状态的话,决策就变成从前面的某个j一直捡到i才送回垃圾. 这就变成了一个区间选最小值的问题,用单调队列 ...
- 使用Process组件访问本地进程
实现效果; 知识运用: Process组件的StartInfo属性 //获取或设置要传递给Process的Start方法的属性 public ProcessStartInfo StartInfo {g ...
- 说说TCP的三次握手
在说这个问题之前,先说说IP协议和TCP协议 问题:IP协议能做什么?不能做什么? 我们都知道IP协议是无连接的通信协议,它不会占用两个正在通信的计算机的通信线路,这样就降低了IP对网络传输中的需求, ...
- java,求1-100之和。
package study01; public class TestWhile { public static void main(String[] args) { int sum = 0; int ...
- 【线段树 泰勒展开】Codechef April Challenge 2018 Chef at the Food Fair
第一次写泰勒展开:本地和CC差距好大 题目大意 大厨住的城市里办了一场美食节.一条街上开设了$N$个摊位,编号为$1∼N$.这天开始时,第$i$个摊位的食物会导致食物中毒的概率是$P_i$.在这一天中 ...
- LVS-nat模式-原理介绍
集群,为解决某个特定问题将多台计算机组合起来形成的单个系统 lvs-nat: 本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发 lvs集群类 ...
- 01windows常用命令及批处理
1. 概述 复制内容:右键弹出快捷菜单,选择"标记(K)",然后选中所需要的内容,然后右键即可 粘贴内容:右键弹出快捷菜单,选择"粘贴(P)" 命令参数的路径: ...
- Qt概念和快捷键
Qt概念和快捷键 Qt简介 1.Qt的由来和发展 Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程 ...