题目

题目链接

题意

给你个数列,编号为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 哈希冲突 分块相关推荐

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

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

  2. 洛谷3396 哈希冲突 【分块】

    题目 众所周知,模数的hash会产生冲突.例如,如果模的数p=7,那么4和11便冲突了. B君对hash冲突很感兴趣.他会给出一个正整数序列value[]. 自然,B君会把这些数据存进hash池.第v ...

  3. P3396 哈希冲突 根号分治

    传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的数组aaa,每次操作有两种: (1)(1)(1) 给出x,yx,yx,y,问aaa中下表在模xxx的时候,模数等于yyy的位置aia_i ...

  4. 【题解】洛谷P4168 [Violet]蒲公英 (分块)

    [题解]洛谷P4168 [Violet]蒲公英 (分块)     D e s c r i p t i o n \rm Description Description 我们把所有的蒲公英看成一个长度为 ...

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

    题目链接:https://www.luogu.org/problemnew/show/P3396 题目描述 众所周知,模数的hash会产生冲突.例如,如果模的数p=7,那么4和11便冲突了. B君对h ...

  6. luogu P3396 哈希冲突 根号算法

    实际上跟哈希没有关系,跟分块也没关系. sum[p][k]表示取模p,余k的所有下标位置的和.up为sqrt(n).显然我们可以在O(nsqrt(n))的时间内预处理出sum数组.对于p不超过up的询 ...

  7. 洛谷模拟赛 部落冲突

    题目背景 在一个叫做Travian的世界里,生活着各个大大小小的部落.其中最为强大的是罗马.高卢和日耳曼.他们之间为了争夺资源和土地,进行了无数次的战斗.期间诞生了众多家喻户晓的英雄人物,也留下了许多 ...

  8. 洛谷-P3203 弹飞绵羊 分块

    题目 题目链接 题意 据说这道题要用一道叫做LCT的数据结构,然而我不会... 一排有n个弹簧装置,从第iii个可一往后跳k[i]" role="presentation" ...

  9. 洛谷-P2801 教主的魔法 分块

    题目 题目链接 题意 修改:将一个区间内所有的数+C. 查询:查询一个区间内>C的数字有多少个. 题解 很经典的分快算法题目. 将数列分块以后,对块内的元素进行排序. 当我们要做修改操作的时候: ...

最新文章

  1. 输出三角形(3.12)(Java)
  2. jstat_使用jstat报告自定义JVM指标集
  3. .Netcore使用Session
  4. 在DNN中如何使FriendlyURL使用PageName作为页面名称
  5. 推荐算法炼丹笔记:电商搜索推荐业务词汇表
  6. python中List的sort方法(或者sorted内建函数)的用法
  7. mysql ---- innodb-3-锁、事务
  8. y7000 intel nvidia 双显卡安装Ubuntu16.04
  9. [C++STL]deque容器用法介绍
  10. [WebApi] 捣鼓一个资源管理器--多文件上传+数据库辅助
  11. 外螺纹对照表_螺纹螺距对照表
  12. Zend Studio配置:使用PHP 7进行开发
  13. Matlab自编函数实现Sobel边缘检测
  14. go语言实现家庭收支记账本
  15. 超级干货:手把手教你如何实现数据可视化
  16. vue项目首屏加载优化
  17. Pytorch3d中的倒角损失函数Chamfer Distance Loss的用法(pytorch3d.loss.chamfer_distance)
  18. 阜城中学2021高考成绩查询,河北省衡水市阜城中学2020-2021学年高二上学期开学考试英语试题...
  19. mysql链接liunx远程服务器
  20. Spring aop(Aspectj)对dynamic proxy的类是无能为力的

热门文章

  1. 服务器不知道怎么回事安卓系统很卡,为什么安卓系统很容易变卡?该怎么解决?看完长知识了...
  2. 复旦计算机考研英语,2020考研复旦计算机专硕392经验贴
  3. C++中判断在字符串中是否存在空格 以及 如何输入带空格的字符串
  4. 『软件工程3』你应该知道的三种原型实现模型:抛弃式、演化式、增量式
  5. html中的时间代码怎么写,html网页代码中的时间样式怎样设置
  6. 写出TREE-PREDECESSOR的伪代码(算法导论第三版12.2-3)
  7. python3.6基础知识_python的基础知识
  8. Python--第2次平时作业
  9. Java HashMap的实现原理详解
  10. SpringMVC 、Struts的区别