社区讨论
python3 求助卡常
P3372【模板】线段树 1参与者 5已保存回复 11
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 11 条
- 当前快照
- 1 份
- 快照标识符
- @mhixopfb
- 此快照首次捕获于
- 2025/11/03 17:24 4 个月前
- 此快照最后确认于
- 2025/11/08 07:54 3 个月前
rt。
pts, TLE。
代码:
PYn, Q = (int(x) for x in input().split(' '))
a = input().split(' ')
a.insert(0, 0)
sum = [0] * (4 * n + 1)
tag = [0] * (4 * n + 1)
def ls(p) :
return p << 1
def rs(p) :
return p << 1 | 1
def psup(p) :
sum[p] = sum[ls(p)] + sum[rs(p)]
def build(p = 1, L = 1, R = n) :
if L == R :
sum[p] = int(a[L])
return
mid = (L + R) >> 1
build(ls(p), L, mid)
build(rs(p), mid + 1, R)
psup(p)
return
def work(p, L, R, k) :
tag[p] += k
sum[p] += (R - L + 1) * k
return
def psd(p, L, R) :
if tag[p] == 0 :
return
mid = (L + R) >> 1
work(ls(p), L, mid, tag[p]), work(rs(p), mid + 1, R, tag[p])
tag[p] = 0
return
def add(l, r, k, p = 1, L = 1, R = n) :
if l <= L and R <= r :
work(p, L, R, k)
return
psd(p, L, R)
mid = (L + R) >> 1
if l <= mid :
add(l, r, k, ls(p), L, mid)
if(r > mid) :
add(l, r, k, rs(p), mid + 1, R)
psup(p)
return
def query(l, r, p = 1, L = 1, R = n) :
if l <= L and R <= r :
return sum[p]
res = 0
mid = (L + R) >> 1
psd(p, L, R)
if(l <= mid) :
res += query(l, r, ls(p), L, mid)
if(r > mid) :
res += query(l, r, rs(p), mid + 1, R)
return res
build()
for i in range(1, Q + 1) :
tmp = input().split(' ')
op, l, r = int(tmp[0]), int(tmp[1]), int(tmp[2])
if op == 1 :
k = int(tmp[3])
add(l, r, k)
else :
print(query(l, r))
回复
共 11 条回复,欢迎继续交流。
正在加载回复...