【 Educational Codeforces Round 71 (Rated for Div. 2) F】Remainder Problem【分块】
题意:
一个长度为 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【分块】相关推荐
- 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)( ...
- Educational Codeforces Round 76 (Rated for Div. 2) F. Make Them Similar 折半搜索
传送门 文章目录 题意: 思路: 题意: 思路: 一个显然的思路就是2302^{30}230枚举所有的xxx,让后再检查,这个复杂度显然不能接受. 又发现对于每个位置它取多少不受其他位置限制,满足可拼 ...
- 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 ...
- 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数组不增的概率. 思 ...
- Educational Codeforces Round 101 (Rated for Div. 2) F. Power Sockets 哈希 + 乱搞
传送门 题意: 给一个二进制串aaa,让后定义两个串相似为有至少一个相同位置相等.现在让你找一个字典序最小的长度为kkk的串使其与aaa中每个长度为kkk的字串相似. 思路: 首先我们知道所有可能的串 ...
- 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 ...
- 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 ...
- Educational Codeforces Round 112 (Rated for Div. 2)-A. PizzaForces-题解
目录 Educational Codeforces Round 112 (Rated for Div. 2)-A. PizzaForces Problem Description Input Outp ...
- 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这个时候两 ...
- Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...
最新文章
- dispatch callback ant design pro 网络请求回调函数
- bzoj 1863 二分+dp check
- 计算机辅助的开发方法,基于计算机辅助设计技术(TCAD)的工艺开发
- Windows 安装android studio的完整教程
- 修改Extmail和Extman的源代码增加公司部门和中文名字段
- 对博客园的建议与意见
- 批量归一化Batch Normalization 动手学深度学习v2
- 湖南师范大学计算机网络基础教学平台,基于网络的师徒式教学平台的设计与实现...
- office 2010 在安装过程中出错
- 星空编程 小甲鱼c语言,c++快速入门(小甲鱼)
- html页面批量打印EMS快递单,如何批量打印快递单/电子面单?
- Kaldi 文件打印及其说明
- 动手学深度学习笔记4——微积分自动微分
- centos图形化磁盘文件管理_centos7图形化分区和ks文件分区的配置
- oracle arc安装教程,ArcSDE Oracle的安装教程
- python - 文件操作函数练习
- 游戏音乐的成长经历了哪些?
- 多叉路口交通灯问题,输入任意道口数输出排序解决方案
- ubuntu下网页快捷方式,chrome网页添加到桌面
- 服务器系统ghost蓝屏,win7系统ghost安装一半蓝屏的解决方法
热门文章
- 升级:myeclipse 2015 ci 16发布
- 关于silverlight打印功能
- java入门第二季 答答租车系统
- 一键安装服务器系统,一键安装服务器系统
- pyqt5 tablewidget 设置行高_Python+PyQt5基础开发(10)
- centos安装python3.8.1_centos6.6下安装python3.8.1后报错??报错-问答-阿里云开发者社区-阿里云...
- python socket清空接受区_用 Python 开发一个 「聊天室」
- 1043 Is It a Binary Search Tree (25 分) BST反转?不反转 遍历+vector
- java排除文件夹某文件,.gitignore排除文件夹,但包括特定的子文件夹
- kill -9 杀不死的进程处理办法