本文共 2174 字,大约阅读时间需要 7 分钟。
为了解决这个问题,我们需要处理基站报告的变化,并回答关于矩形区域内活动手机总数的查询。我们可以使用二维树状数组来高效地处理点更新和区间查询操作。
import sysdef main(): # 读取输入直到遇到指令3 while True: line = sys.stdin.readline() if not line: break line = line.strip() if not line: continue parts = list(map(int, line.split())) op = parts[0] if op == 3: break if op == 0: S = parts[1] S_val = S c = [[0]*(S_val +1) for _ in range(S_val +1)] elif op == 1: x = parts[1] y = parts[2] a = parts[3] # 更新坐标为x+1, y+1 i = x +1 j = y +1 while i <= S_val: bit = i & -i while j <= S_val: bit2 = j & -j c[i][j] += a j += bit2 i += bit elif op == 2: l = parts[1] b = parts[2] r = parts[3] t = parts[4] # 转换为1-based l1 = l +1 b1 = b +1 r1 = r +1 t1 = t +1 # 计算区域和 # sum(r1, t1) - sum(l1-1, t1) - sum(r1, b1-1) + sum(l1-1, b1-1) def get_sum(x, y): res = 0 i = x while i > 0: bit = i & -i j = y while j > 0: res += c[i][j] j -= bit i -= bit return res total = get_sum(r1, t1) - get_sum(l1-1, t1) - get_sum(r1, b1-1) + get_sum(l1-1, b1-1) print(total) else: continueif __name__ == "__main__": main()
该方法能够高效处理多个指令,确保在合理时间内完成查询和更新操作。
转载地址:http://uuxfk.baihongyu.com/