- 【模板】线段树 2
- 关于pd()
- @ 2024-12-20 13:53:09
卡了好久,结果发现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
- 
  C23huangminzhe LV 7 @ 2024-12-20 13:54:28知道吗,上面的文章刚好1064个字 
- 1
Information
- ID
- 287
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 8
- Tags
- # Submissions
- 69
- Accepted
- 12
- Uploaded By
