蒟蒻求助
查看原帖
蒟蒻求助
159959
虫洞吞噬者楼主2021/9/28 21:09

这道题我用差分来做,对于每一个修改直接修改差分数组,对于每一个查询直接暴力把差分数组遍历一遍。最后的FinalFinal次询问使用了一个前缀和来记录答案的个数(思路很正确),但一直过不去(只有10分)

求大佬指正

code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
ll n,m,minx,maxn,ans,mod,ff;
char k;
ll cha[1001000],pre[1001000],num[1001000];
inline bool judge(ll k,int id)
{
	ll qaq=k*id%mod;
	return ((qaq>=minx)&&(qaq<=maxn));
}
int main()
{
	scanf("%lld %lld %lld %lld %lld",&n,&m,&mod,&minx,&maxn);
	for(int i=1;i<=m;++i)
	{
		ll x,y,z;
		scanf("\n%c",&k);
		if(k=='A')
		{
			scanf("%lld%lld%lld",&x,&y,&z);
			cha[x]+=z;
			cha[y+1]-=z;
		}
		if(k=='Q')
		{
			scanf("%lld%lld",&x,&y);
			ll ans=0,cur=0;
			for(register int j=1;j<=y;++j)
			{
				cur+=cha[i];
				if(judge(cur,j)&&j>=x)++ans;
			}
			printf("%lld\n",ans);
		}
	}
	ll cur=0;
	for(int i=1;i<=n;++i)
	{
		cur+=cha[i];
		pre[i]+=pre[i-1];
		if(judge(cur,i))++pre[i];
	}
	scanf("%lld",&ff);
	for(int i=1;i<=ff;++i)
	{
		ll a,b;
		scanf("%lld%lld",&a,&b);
		printf("%lld\n",pre[b]-pre[a-1]);
	}
	return 0;
}
2021/9/28 21:09
加载中...