Remainder Problem(CF 1207 F)

CodeForces - 1207F

题目大意

你有一个长度为500000的数组,每个位置上的数初始值为0,有q次操作,每次的操作有两种:11 x y表示对第x个位置上的数加y22 x y表示要求你输出所有对x取模后为y的位置的和。

思路

这题是一个模数分块,就是当x>n时可以暴力查找,然后小范围的时候可以维护dp[x][y]为所有对x取模后为y的位置的和,然后就可以直接输出答案,然后就结束了。

代码

#include<bits/stdc++.h>
using namespace std;
const int n=sqrt(500000);
const int N=n+5;
int dp[N][N]; 
int a[500005];
int main()
{
	int _;
	scanf("%d",&_);
	while(_--)
	{
		int op,x,y;
		scanf("%d%d%d",&op,&x,&y);
		if(op==1)
		{
			for(int i=1;i<=n;i++)
			{
				dp[i][x%i]+=y;
			}
			a[x]+=y;
		}
		else
		{
			if(x<=n)printf("%d\n",dp[x][y]);
			else
			{
				long long ans=0;
				for(int i=y;i<=500000;i+=x)
				{
					ans+=a[i];
				}
				printf("%d\n",ans);
			}
		}
	}
	return 0;
}

__EOF__

本文作者Jerry-Black
本文链接https://www.cnblogs.com/Jerry-Black/p/16295901.html
关于博主:小蒟蒻一只( ̄^ ̄)ゞ
版权声明:转载请注明来源哟~ QAQ
声援博主:UP UP UP !!!
posted @   Jerry_Black  阅读(112)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示