卡了好久,结果发现pushdown函数前面不需要加任何if(不需要条件)

void add(int tl,int tr,int x,int l,int r,int p){
	if (tl <= l && r <= tr){
		(a[p] += (r - l + 1) * x) %= m;
		(b[p] += x) %= m;
		return ;
	}
	int mid = l + (r - l >> 1);
//	if ((b[p] || c[p] > 1) && l != r)
		pd(l,r,p);
	if (tl <= mid)	add(tl,tr,x,l,mid,p * 2);
	if (mid < tr)	add(tl,tr,x,mid + 1,r,p * 2 + 1);
	a[p] = (a[p * 2] + a[p * 2 + 1]) % m;
}
void mul(int tl,int tr,int x,int l,int r,int p){
	if (tl <= l && r <= tr){
		(a[p] *= x) %= m;
		(c[p] *= x) %= m;
		(b[p] *= x) %= m;
		return ;
	}
	int mid = l + (r - l >> 1);
//	if ((b[p] || c[p] > 1) && l != r)
		pd(l,r,p);
	if (tl <= mid)	mul(tl,tr,x,l,mid,p * 2);
	if (mid < tr)	mul(tl,tr,x,mid + 1,r,p * 2 + 1);
	a[p] = (a[p * 2] + a[p * 2 + 1]) % m;
}
int query(int tl,int tr,int l,int r,int p){
	if (tl <= l && r <= tr)	return a[p];
	int mid = l + (r - l >> 1);
//	if (b[p] || c[p] > 1)
		pd(l,r,p);
	int sum = 0;
	if (tl <= mid)	sum += query(tl,tr,l,mid,p * 2) % m;
	if (mid < tr)	sum += query(tl,tr,mid + 1,r,p * 2 + 1) % m;
	return sum % m;
}

QWQ,卡死我了。

1 comments

  • 1

Information

ID
287
Time
1000ms
Memory
256MiB
Difficulty
8
Tags
# Submissions
69
Accepted
12
Uploaded By