一个疑惑
查看原帖
一个疑惑
324666
diqiuyi奶龙楼主2022/7/23 23:21

这是 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;
}

个人觉得下面的写法没有问题,哪位大神能解释一下为什么

2022/7/23 23:21
加载中...