E. Remainder Problem 分块
两个操作
1对x位置的a[x]+y
2对所有i=y(mod x)求a[i]的和
我们肯定不能n^2 跑,稳超时,但是我们可以这样分块考虑。
为什么n^2不行?因为在x比较小的时候,这个求和操作次数太多了。但是x比较大的时候,这个对时间并没有什么影响
所有我们考虑分块。
用一个dp[i][j]表示(1-5e5的长度分成了长度为x的块,且块内偏移为j)的所有位置的和。
那么操作1,对a[pos]+=x后,需要对所有块长1到sqrt(len)的pos所处的块内偏移位置进行维护,以保证在询问块长1-sqrt(len)的时候,我们都能o(1)回答
如果块长大于sqrt(len)后,我们数组已经开不下,并且维护的时间将超出O(sqrt(5e5)) ,我们考虑直接暴力
因为此时块长大于sqrt(len)后,我们暴力加和的次数最大也就sqrt(5e5),并且随着块长数越大,次数也就越少
通过这个两种情况,我们就把时间复杂度下降到了o(sqrt(5e5))=700*5e5次查询,4秒也是可以接受的。(其实我感觉是接受不了的,谁叫cf跑的快)。。。
#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int maxn = 5e5+;
LL dp[][];
LL a[maxn];
int main(){
int t,op;
LL x,y;
scanf("%d",&t);
while(t--){
scanf("%d",&op);
if(op==){
scanf("%lld%lld",&x,&y);
a[x]+=y;
for(int i=;i<;i++){
dp[i][x%i]+=y;
}
}else {
scanf("%lld%lld",&x,&y);
if(x<){
printf("%lld\n",dp[x][y]);
}else {
LL ans=;
for(int i=y;i<=5e5;i+=x){
ans+=a[i];
}
printf("%lld\n",ans);
}
}
}
return ;
}
E. Remainder Problem 分块的更多相关文章
- Remainder Problem
F. Remainder Problem 这个其实并不难,只是看看考察有没有分块的思路 思路:用一个ans[i][j]来记录所有k=(1~5e5)中所有a[k]%i==j的和,在查询的时候可以达到复杂 ...
- Remainder Problem(分块) Educational Codeforces Round 71 (Rated for Div. 2)
引用:https://blog.csdn.net/qq_41879343/article/details/100565031 下面代码写错了,注意要上面这种.查:2 800 0,下面代码就错了. ...
- Educational Codeforces F. Remainder Problem
[传送门] 题意就是单点加以及查询下标为等差数列位置上的值之和.刚开始看到这道题.我以为一个数的倍数是log级别的.就直接写了发暴力.就T了.还在想为啥,优化了几发才发现不太对劲.然后才想到是$\df ...
- Educational Codeforces Round 71 (Rated for Div. 2)
传送门 A.There Are Two Types Of Burgers 签到. B.Square Filling 签到 C.Gas Pipeline 每个位置只有"高.低"两种状 ...
- [Codeforces Educational Round 71]Div. 2
总结 手速场...像我这种没手速的就直接炸了... 辣鸡 E 题交互,少打了个 ? 调了半个小时... 到最后没时间 G 题题都没看就结束了...结果早上起来被告知是阿狸的打字机...看了看题一毛一样 ...
- Educational Codeforces Round 71
https://www.cnblogs.com/31415926535x/p/11460682.html 上午没课,做一套题,,练一下手感和思维,,教育场的71 ,,前两到没啥,,后面就做的磕磕巴巴的 ...
- Educational Codeforces Round 71 (Rated for Div. 2) Solution
A. There Are Two Types Of Burgers 题意: 给一些面包,鸡肉,牛肉,你可以做成鸡肉汉堡或者牛肉汉堡并卖掉 一个鸡肉汉堡需要两个面包和一个鸡肉,牛肉汉堡需要两个面包和一个 ...
- CF Edu Round 71
CF Edu Round 71 A There Are Two Types Of Burgers 贪心随便模拟一下 #include<iostream> #include<algor ...
- Educational Codeforces Round 71 (Rated for Div. 2)-F. Remainder Problem-技巧分块
Educational Codeforces Round 71 (Rated for Div. 2)-F. Remainder Problem-技巧分块 [Problem Description] ...
随机推荐
- JAVA读取文件操作时路径的斜杠问题
java中的路径一般用"/"windows中的路径用"\"linux,unix中的路径一般用"/"其中java中"/"等 ...
- Linux 中查询 CPU 的核数的方法
以一台 Linux 服务器为例.这台 Linux 包括两颗 Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz CPU, 单颗 CPU 包括 10 个 cpu core ...
- sar-CPU统计数据
sar -u输出显示CPU信息.-u选项是sar的默认选项.该输出以百分比显示CPU的使用情况.表3-2解释该输出. 表3-2 ...
- 洛谷P2347 砝码称重 [2017年4月计划 动态规划01]
P2347 砝码称重 题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入输出格式 输入格式: 输入方式:a1 a2 a3 a4 a5 a6 (表示1 ...
- Leetcode15.3Sum三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以包含重复的三元组. ...
- UE4物理模块(三)---碰撞查询(上)
在前一文中介绍了如何在UE4中创建简单碰撞或者直接使用其mesh表示的复杂碰撞: Jerry:UE4物理模块(二)---建立物体碰撞zhuanlan.zhihu.com 那么在拿到碰撞之后,就可以进 ...
- ubuntu16安装python3.7
####################################################源码安装python,注意shell脚本第一行开头的要求#################### ...
- WPF e.Systemkey的一个坑
当用代码去控制按键盘F10按钮的时候,切换TabControl的标签页,然后再按其余的键盘键,无法响应 原因就是这个systemkey,是因为F10为系统的按键,用e.key==key.f10是无效的 ...
- python学习笔记09--线程、进程
本节内容 一.进程与线程的概念 1.1进程 1.2线程 1.3进程与线程的区别 二.线程 2.1启一个线程 2.2线程的2种调用方式 2.3 join 2.4 守护线程Daemon 2.5线程锁 2. ...
- 顶级测试框架Jest指南:跑通一个完美的程序,就是教出一群像样的学生
facebook三大项目:yarn jest metro,有横扫宇宙之势. 而jest项目的宗旨为:减少测试一个项目所花费的时间成本和认知成本. --其实,它在让你当一个好老师. jest文档非常简略 ...