题意:

一个长度为 5∗1055*10^55∗105 的数组,初始为空,支持两种操作。操作 111,1xy1\ x\ y1 x y 表示将 axa_xax​ 增加 yyy。操作 222,2xy2\ x\ y2 x y,表示统计所有下标模 xxx 为 yyy 的数的和,一共有 5∗1055*10^55∗105 次操作。(1≤x≤500000)(1\leq x\leq 500000)(1≤x≤500000)


思路:

昨晚最后有半个小时写这题,但是还是没有啥思路,完全没有往分块上去想…分块技能树有点缺乏啊!最后 10min10\ min10 min,感觉搞不定了,乱打一发线段树成功 TLETLETLE…自闭了…

所以正解就是分块,当然分块的复杂度为 n∗nn*\sqrt nn∗n​ 。我们来考虑下此题如何进行分块,显然要对于模数进行分类。5∗105=710\sqrt {5*10^5}=7105∗105​=710,我们对于模数大于 710710710 的数,直接暴力求,复杂度为 O(n)O(\sqrt n)O(n​)。对于模数小于 710710710 的数,我们预先统计答案直接求得。

那么对于模数小于 710710710 的数,如何预先处理答案呢?对于 ax=ax+ya_x=a_x+yax​=ax​+y,我们暴力所有模数,b[i][j]b[i][j]b[i][j] 表示模 iii 为 jjj 的数的 sumsumsum 和。因此我们令 b[i][x%i]=b[i][x%i]+yb[i][x\%i]=b[i][x\%i]+yb[i][x%i]=b[i][x%i]+y,这样的复杂度也是 O(n)O(\sqrt n)O(n​),因此最终复杂度为 O(n∗n)O(n*\sqrt n)O(n∗n​),分块成功。


总结:

反思一下为什么没有想到分块,如果想到了分块,按理来说思路也没有那么难想。

这么看来的话,应该是思维体系里完全没有分块这个意识,数据结构的技能树里分块这里非常灰暗…看来还是非常有必要抽出一段时间来巩固所有的基础专题。继续加油!


代码:

#include <bits/stdc++.h>
#define __ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define rep(i,a,b) for(int i = a; i <= b; i++)
#define LOG1(x1,x2) cout << x1 << ": " << x2 << endl;
#define LOG2(x1,x2,y1,y2) cout << x1 << ": " << x2 << " , " << y1 << ": " << y2 << endl;
#define LOG3(x1,x2,y1,y2,z1,z2) cout << x1 << ": " << x2 << " , " << y1 << ": " << y2 << " , " << z1 << ": " << z2 << endl;
typedef long long ll;
typedef double db;
const int N = 5*1e5+100;
const db EPS = 1e-9;
using namespace std;ll a[N],b[715][715];int main()
{int _; scanf("%d",&_);while(_--){int op; scanf("%d",&op);if(op == 1){int x,y; scanf("%d%d",&x,&y);a[x] += y;rep(i,1,710) b[i][x%i] += (ll)y;}else{ int x,y; scanf("%d%d",&x,&y);if(x <= 710) printf("%lld\n",b[x][y]);else{ll tp = 0;for(int i = y; i <= (int)5*1e5; i += x) tp += a[i];printf("%lld\n",tp);}}}return 0;
}

【 Educational Codeforces Round 71 (Rated for Div. 2) F】Remainder Problem【分块】相关推荐

  1. Educational Codeforces Round 73 (Rated for Div. 2) F. Choose a Square 线段树 + 二维转一维

    传送门 文章目录 题意: 思路: 题意: 给你nnn个点(xi,yi)(x_i,y_i)(xi​,yi​),每个点有个价值cic_ici​,现在你可以框一个正方形,要求左下角和右上角的坐标(x,y)( ...

  2. Educational Codeforces Round 76 (Rated for Div. 2) F. Make Them Similar 折半搜索

    传送门 文章目录 题意: 思路: 题意: 思路: 一个显然的思路就是2302^{30}230枚举所有的xxx,让后再检查,这个复杂度显然不能接受. 又发现对于每个位置它取多少不受其他位置限制,满足可拼 ...

  3. Educational Codeforces Round 41 (Rated for Div. 2) F. k-substrings

    F. k-substrings time limit per test 4 seconds memory limit per test 256 megabytes input standard inp ...

  4. Educational Codeforces Round 81 (Rated for Div. 2) F.Good Contest \ 洛谷 划艇 组合 计数dp

    cf传送门 P3643 [APIO2016]划艇 文章目录 题意: 思路: 题意: aia_iai​在[li,ri][l_i,r_i][li​,ri​]等概率随机选一个数,求aaa数组不增的概率. 思 ...

  5. Educational Codeforces Round 101 (Rated for Div. 2) F. Power Sockets 哈希 + 乱搞

    传送门 题意: 给一个二进制串aaa,让后定义两个串相似为有至少一个相同位置相等.现在让你找一个字典序最小的长度为kkk的串使其与aaa中每个长度为kkk的字串相似. 思路: 首先我们知道所有可能的串 ...

  6. Educational Codeforces Round 87 (Rated for Div. 2) F. Summoning Minions

    题目链接 Polycarp plays a computer game. In this game, the players summon armies of magical minions, whi ...

  7. Educational Codeforces Round 95 (Rated for Div. 2)D. Trash Problem(权值线段树+离散化)

    题目描述 Vova decided to clean his room. The room can be represented as the coordinate axis OX. There ar ...

  8. Educational Codeforces Round 112 (Rated for Div. 2)-A. PizzaForces-题解

    目录 Educational Codeforces Round 112 (Rated for Div. 2)-A. PizzaForces Problem Description Input Outp ...

  9. Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)

    Educational Codeforces Round 90 (Rated for Div. 2) Donut Shops 思路 分三种情况: a==c/ba == c / ba==c/b这个时候两 ...

  10. Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...

最新文章

  1. dispatch callback ant design pro 网络请求回调函数
  2. bzoj 1863 二分+dp check
  3. 计算机辅助的开发方法,基于计算机辅助设计技术(TCAD)的工艺开发
  4. Windows 安装android studio的完整教程
  5. 修改Extmail和Extman的源代码增加公司部门和中文名字段
  6. 对博客园的建议与意见
  7. 批量归一化Batch Normalization 动手学深度学习v2
  8. 湖南师范大学计算机网络基础教学平台,基于网络的师徒式教学平台的设计与实现...
  9. office 2010 在安装过程中出错
  10. 星空编程 小甲鱼c语言,c++快速入门(小甲鱼)
  11. html页面批量打印EMS快递单,如何批量打印快递单/电子面单?
  12. Kaldi 文件打印及其说明
  13. 动手学深度学习笔记4——微积分自动微分
  14. centos图形化磁盘文件管理_centos7图形化分区和ks文件分区的配置
  15. oracle arc安装教程,ArcSDE Oracle的安装教程
  16. python - 文件操作函数练习
  17. 游戏音乐的成长经历了哪些?
  18. 多叉路口交通灯问题,输入任意道口数输出排序解决方案
  19. ubuntu下网页快捷方式,chrome网页添加到桌面
  20. 服务器系统ghost蓝屏,win7系统ghost安装一半蓝屏的解决方法

热门文章

  1. 升级:myeclipse 2015 ci 16发布
  2. 关于silverlight打印功能
  3. java入门第二季 答答租车系统
  4. 一键安装服务器系统,一键安装服务器系统
  5. pyqt5 tablewidget 设置行高_Python+PyQt5基础开发(10)
  6. centos安装python3.8.1_centos6.6下安装python3.8.1后报错??报错-问答-阿里云开发者社区-阿里云...
  7. python socket清空接受区_用 Python 开发一个 「聊天室」
  8. 1043 Is It a Binary Search Tree (25 分) BST反转?不反转 遍历+vector
  9. java排除文件夹某文件,.gitignore排除文件夹,但包括特定的子文件夹
  10. kill -9 杀不死的进程处理办法