diqiuyi @ 2022-07-23 23:21:05
这是 AC 代码片段
inline void Add(int l,int r,int w){
for(int i=l;i<=min(r,bl[l]*block);i++)
a[i]+=w;
for(int i=(bl[l]-1)*block+1;i<=min(n,bl[l]*block);i++)
b[i]=a[i];
sort(b+(bl[l]-1)*block+1,b+min(n,bl[l]*block)+1);
if(bl[l]^bl[r]){
for(int i=(bl[r]-1)*block+1;i<=r;i++)
a[i]+=w;
for(int i=(bl[r]-1)*block+1;i<=min(n,bl[r]*block);i++)
b[i]=a[i];
sort(b+(bl[r]-1)*block+1,b+min(n,bl[r]*block)+1);
}
for(int i=bl[l]+1;i<bl[r];i++)
ad[i]+=w;
}
但是如果改成这样的话,就会 WA on #9
inline void Add(int l,int r,int w){
for(int i=l;i<=min(r,bl[l]*block);i++)
a[i]+=w;
for(int i=l;i<=min(n,bl[l]*block);i++)//注意看这里
b[i]=a[i];
sort(b+l+1,b+min(n,bl[l]*block)+1);//和这里
if(bl[l]^bl[r]){
for(int i=(bl[r]-1)*block+1;i<=r;i++)
a[i]+=w;
for(int i=(bl[r]-1)*block+1;i<=min(n,bl[r]*block);i++)
b[i]=a[i];
sort(b+(bl[r]-1)*block+1,b+min(n,bl[r]*block)+1);
}
for(int i=bl[l]+1;i<bl[r];i++)
ad[i]+=w;
}
个人觉得下面的写法没有问题,哪位大神能解释一下为什么
by diqiuyi @ 2023-02-20 19:23:40
啊wssb