Educational Codeforces Round 71 (Rated for Div. 2) F.Remainder Problem(分块暴力)

题目链接
思路:
f [ i ] [ j ] f[i][j] f[i][j]为范围在1-800内 模i为j的所有答案
然后对每个修改操作直接改,然后如果x<=800的话直接更新一下f。

对于每个询问操作,小范围直接输出f[x][y],大范围直接暴力即可
因为每次操作处理最多是800的
所以复杂度可以保证

#include<bits/stdc++.h>
 
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define LL long long
#define SZ(X) X.size()
#define ALL(X) X.begin(),X.end()
 
using namespace std;
 
LL gcd(LL a, LL b) {return b ? gcd(b, a % b) : a;}
LL lcm(LL a, LL b) {return a / gcd(a, b) * b;}
LL powmod(LL a, LL b, LL MOD) {LL ans = 1; while (b) {if (b % 2)ans = ans * a % MOD; a = a * a % MOD; b /= 2;} return ans;}
const int N = 1e6 + 11;
int q;
LL a[N], b[N], f[877][877];
int main() {
	ios::sync_with_stdio(false);
	for (cin >> q; q; q--) {
		int t, x, y;
		cin >> t >> x >> y;
		if (t == 1) {
			b[x] += y;
			for (int i = 1; i <= 800; i++) {
				f[i][x % i] += y;
			}
		} else {
			LL ans = 0;
			if (x <= 800 )
				ans += f[x][y];
			if (x > 800)
				for (int j = y; j <= 500000; j += x) {
					ans += b[j];
				}
			cout << ans << endl;
		}
	}
	return 0;
}
全部评论

相关推荐

门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
你的秋招第一场笔试是哪家
点赞 评论 收藏
分享
LemontreeN:有的兄弟有的我今天一天面了五场,4个二面一个hr面
投递字节跳动等公司10个岗位
点赞 评论 收藏
分享
“校招”、“3-5年经验”
飞花断音:小公司招逆向的不要去,基本上都是搞黑灰产违法的东西
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务