洛谷-P3396 哈希冲突 分块
题目
题目链接
题意
给你个数列,编号为1…n1…n1…n。
给出两种操作:
- 查询操作:查询所有编号模xxx得y" role="presentation" style="position: relative;">yyy的对应数字之和。
- 修改操作:把编号为xxx的数字,修改为y" role="presentation" style="position: relative;">yyy。
题解
我们先从最为暴力的思路出发:
- 对于查询xxx、y" role="presentation" style="position: relative;">yyy来说,我们要统计的就是编号为y,x+y,…,kx+yy,x+y,…,kx+yy,x+y,…,kx+y的数字之和。
我们可以把要求的东西简写成sum[x][y]sum[x][y]sum[x][y],代表的含义是模xxx余y" role="presentation" style="position: relative;">yyy的编号对应的数字之和,下面我们需要来维护这个东西。
预处理:
for(int i = 1;i <= n;++i){for(int x = 1;x <= n;++x){sum[x][i%x] += a[i];}
}
预处理sum[x][y]sum[x][y]sum[x][y]的时间复杂度为O(n2)O(n2)O(n^2)
想要降低时间复杂度,我们可以想到分块,分块能降低到O(nn‾√)O(nn)O(n\sqrt{n})
做法如下:
我们对模数进行分块,当模数x<n‾√x<nx 的时候,我们暴力与处理,时间复杂度为O(nn‾√)O(nn)O(n\sqrt{n})。
当模数x>n‾√x>nx > \sqrt{n} 时候我们不将其处理。
询问模数x<n‾√x<nx 时候,直接回答。
询问模数x>n‾√x>nx > \sqrt{n}时候,暴力按照a[y]+a[x+y]+…+a[kx+y]a[y]+a[x+y]+…+a[kx+y]a[y] + a[x+y] + … +a[kx+y]进行计算,由于x>n‾√x>nx > \sqrt{n} ,所以求和的数不超过nn‾√nnn\sqrt{n}个。
总的复杂度是x>n‾√x>nx > \sqrt{n}。
代码
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
#define pr(x) cout<<#x<<":"<<x<<endl
int n,m;
int val[150007];
int dp[1007][1007];
int main(){scanf("%d %d",&n,&m);for(int i = 1;i <= n;++i){int v;scanf("%d",&v);val[i] = v;}for(int i = 1;i <= n;++i){for(int p = 1;p <= 400;++p){dp[p][i%p] += val[i];}}char op;int x,y;for(int i = 0;i < m;++i){scanf(" %c %d %d",&op,&x,&y);if(op == 'A'){if(x <= 400) printf("%d\n",dp[x][y]);else{int ans = 0;for(int j = y;j <= n;j += x){ans += val[j];}printf("%d\n",ans);}}else{for(int p = 1;p <= 400;++p){dp[p][x%p] += y - val[x];}val[x] = y;}}return 0;
}
洛谷-P3396 哈希冲突 分块相关推荐
- 洛谷 P3396 哈希冲突 解题报告
P3396 哈希冲突 题目背景 此题约为NOIP提高组Day2T2难度. 题目描述 众所周知,模数的hash会产生冲突.例如,如果模的数p=7,那么4和11便冲突了. B君对hash冲突很感兴趣.他会 ...
- 洛谷3396 哈希冲突 【分块】
题目 众所周知,模数的hash会产生冲突.例如,如果模的数p=7,那么4和11便冲突了. B君对hash冲突很感兴趣.他会给出一个正整数序列value[]. 自然,B君会把这些数据存进hash池.第v ...
- P3396 哈希冲突 根号分治
传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的数组aaa,每次操作有两种: (1)(1)(1) 给出x,yx,yx,y,问aaa中下表在模xxx的时候,模数等于yyy的位置aia_i ...
- 【题解】洛谷P4168 [Violet]蒲公英 (分块)
[题解]洛谷P4168 [Violet]蒲公英 (分块) D e s c r i p t i o n \rm Description Description 我们把所有的蒲公英看成一个长度为 ...
- P3396 哈希冲突 (根号算法)
题目链接:https://www.luogu.org/problemnew/show/P3396 题目描述 众所周知,模数的hash会产生冲突.例如,如果模的数p=7,那么4和11便冲突了. B君对h ...
- luogu P3396 哈希冲突 根号算法
实际上跟哈希没有关系,跟分块也没关系. sum[p][k]表示取模p,余k的所有下标位置的和.up为sqrt(n).显然我们可以在O(nsqrt(n))的时间内预处理出sum数组.对于p不超过up的询 ...
- 洛谷模拟赛 部落冲突
题目背景 在一个叫做Travian的世界里,生活着各个大大小小的部落.其中最为强大的是罗马.高卢和日耳曼.他们之间为了争夺资源和土地,进行了无数次的战斗.期间诞生了众多家喻户晓的英雄人物,也留下了许多 ...
- 洛谷-P3203 弹飞绵羊 分块
题目 题目链接 题意 据说这道题要用一道叫做LCT的数据结构,然而我不会... 一排有n个弹簧装置,从第iii个可一往后跳k[i]" role="presentation" ...
- 洛谷-P2801 教主的魔法 分块
题目 题目链接 题意 修改:将一个区间内所有的数+C. 查询:查询一个区间内>C的数字有多少个. 题解 很经典的分快算法题目. 将数列分块以后,对块内的元素进行排序. 当我们要做修改操作的时候: ...
最新文章
- 输出三角形(3.12)(Java)
- jstat_使用jstat报告自定义JVM指标集
- .Netcore使用Session
- 在DNN中如何使FriendlyURL使用PageName作为页面名称
- 推荐算法炼丹笔记:电商搜索推荐业务词汇表
- python中List的sort方法(或者sorted内建函数)的用法
- mysql ---- innodb-3-锁、事务
- y7000 intel nvidia 双显卡安装Ubuntu16.04
- [C++STL]deque容器用法介绍
- [WebApi] 捣鼓一个资源管理器--多文件上传+数据库辅助
- 外螺纹对照表_螺纹螺距对照表
- Zend Studio配置:使用PHP 7进行开发
- Matlab自编函数实现Sobel边缘检测
- go语言实现家庭收支记账本
- 超级干货:手把手教你如何实现数据可视化
- vue项目首屏加载优化
- Pytorch3d中的倒角损失函数Chamfer Distance Loss的用法(pytorch3d.loss.chamfer_distance)
- 阜城中学2021高考成绩查询,河北省衡水市阜城中学2020-2021学年高二上学期开学考试英语试题...
- mysql链接liunx远程服务器
- Spring aop(Aspectj)对dynamic proxy的类是无能为力的
热门文章
- 服务器不知道怎么回事安卓系统很卡,为什么安卓系统很容易变卡?该怎么解决?看完长知识了...
- 复旦计算机考研英语,2020考研复旦计算机专硕392经验贴
- C++中判断在字符串中是否存在空格 以及 如何输入带空格的字符串
- 『软件工程3』你应该知道的三种原型实现模型:抛弃式、演化式、增量式
- html中的时间代码怎么写,html网页代码中的时间样式怎样设置
- 写出TREE-PREDECESSOR的伪代码(算法导论第三版12.2-3)
- python3.6基础知识_python的基础知识
- Python--第2次平时作业
- Java HashMap的实现原理详解
- SpringMVC 、Struts的区别