社区讨论

求调,样例过WA0pts

P12389COmPoUNdS参与者 2已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@mi3yj0wl
此快照首次捕获于
2025/11/18 10:31
3 个月前
此快照最后确认于
2025/11/18 23:51
3 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define int long long
#define ls (p<<1)
#define rs (p<<1|1)
#define mid ((l+r)>>1)
using namespace std;
const int N=1e6+5,M=4e6+100,base=13331,mod=999999999989;
int n,k,q,tr[M],a[N],s[N],bas[N];
inline void ad(int x,int id)
{
	while(id<=n)
	{
		s[id]=((s[id]+x)%k+k)%k;
		id+=(id&(-id));
	}
}
inline int sum(int id)
{
	int ans=0;
	while(id)
	{
		ans+=s[id];
		id&=id-1;
	}
	return (ans%k+k)%k;
}
inline void push_up(int p,int l,int r)
{
	tr[p]=(tr[ls]*bas[r-mid]%mod+tr[rs])%mod;
}
void build(int p,int l,int r)
{
	if(l==r)
	{
		cin>>a[l];
		tr[p]=((a[l]-a[l-1])%k+k)%k;
		ad(a[l]%k,l);
		ad(((-a[l]%k)+k)%k,l+1);
		return;
	}
	build(ls,l,mid);
	build(rs,mid+1,r);
	push_up(p,l,r);
}
void add(int p,int l,int r,int x,int y)
{
	if(l==r)
	{
		tr[p]=((tr[p]+x)%k+k)%k;
		return;
	}
	if(mid>=x)add(ls,l,mid,x,y);
	else add(rs,mid+1,r,x,y);
	push_up(p,l,r);
	return;
}
int query(int p,int l,int r,int x,int y)
{
	if(x<=l&&r<=y)return tr[p];
	if(mid>=x&&mid<y)return ((query(ls,l,mid,x,y)*bas[r-mid]%mod+query(rs,mid+1,r,x,y))%mod+mod)%mod;
	else if(mid>=x)return query(ls,l,mid,x,y);
	else return query(rs,mid+1,r,x,y);
}
signed main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n>>k>>q;
	bas[0]=1;
	for(int i=1;i<=n;++i)bas[i]=bas[i-1]*base%mod;
	build(1,1,n);
	int op,l,r,l2,r2;
	while(q--)
	{
		cin>>op>>l>>r>>l2;
		if(op==1)ad(l2%k,l),ad(((-l2)%k+k)%k,r+1),add(1,1,n,l,l2%k),add(1,1,n,r+1,((-l2)%k+k)%k);
		else
		{
			cin>>r2;
			if(l==r)
			{
				if(sum(l)==sum(l2))cout<<"Yes\n";
				else cout<<"No\n";
			}else
			{
				if(sum(l)==sum(l2)&&query(1,1,n,l+1,r)==query(1,1,n,l2+1,r2))cout<<"Yes\n";
				else cout<<"No\n";
			}
		}
	}
}

回复

4 条回复,欢迎继续交流。

正在加载回复...