社区讨论
求调,样例过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 条回复,欢迎继续交流。
正在加载回复...