- 【模板】线段树 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