目录
一、795. 前缀和 - AcWing题库
n, m = map(int, input().split())
nums = [0] + list(map(int, input().split())) # 在前面加一个元素,防止询问时越界
# 前缀和
for i in range(1, n + 1):
nums[i] += nums[i - 1]
# 询问
for _ in range(m):
l, r = map(int, input().split())
print(nums[r] - nums[l - 1])
二、796. 子矩阵的和 - AcWing题库
n, m, q = map(int, input().split())
mat = []
# 存入矩阵
for _ in range(n):
mat.append(list(map(int, input().split())))
# 前缀和
add = [[0] * (m + 1) for _ in range(n + 1)]
for i in range(n):
for j in range(m):
add[i + 1][j + 1] = add[i][j + 1] + add[i + 1][j] - add[i][j] + mat[i][j]
# 询问
for _ in range(q):
x1, y1, x2, y2 = map(int, input().split())
print(add[x2][y2] - add[x1 - 1][y2] - add[x2][y1 - 1] + add[x1 - 1][y1 - 1])
三、797. 差分 - AcWing题库
n, m = map(int, input().split())
nums = list(map(int, input().split()))
# 操作
diff = [0] * (n + 1) # 差分数组
for _ in range(m):
l, r, c = map(int, input().split())
diff[l - 1] += c
diff[r] -= c
# 前缀和
print(diff[0] + nums[0], end = ' ')
for i in range(1, n):
diff[i] += diff[i - 1]
print(diff[i] + nums[i], end = ' ')
四、798. 差分矩阵 - AcWing题库
n, m, q = map(int, input().split())
# 输入
mat = []
for _ in range(n):
mat.append(list(map(int, input().split())))
# 操作
diff = [[0] * (m + 2) for _ in range(n + 2)]
for _ in range(q):
x1, y1, x2, y2, c = map(int, input().split())
diff[x1][y1] += c
diff[x1][y2 + 1] -= c
diff[x2 + 1][y1] -= c
diff[x2 + 1][y2 + 1] += c
# 前缀和
for i in range(1, n + 1):
for j in range(1, m + 1):
diff[i][j] += diff[i - 1][j] + diff[i][j - 1] - diff[i - 1][j - 1]
print(diff[i][j] + mat[i - 1][j - 1], end = ' ')
print()
五、799. 最长连续不重复子序列 - AcWing题库
# 滑动窗口
import collections
n = int(input())
nums = list(map(int, input().split()))
# hash = collections.defaultdict(int) # 储存区间中元素个数
hash = dict.fromkeys(nums, 0)
left, ans = 0, 0
for right in range(n):
# 遍历右端点
hash[nums[right]] += 1
# 缩短区间,将左端点以到区间内无重复数字
while hash[nums[right]] > 1:
hash[nums[left]] -= 1
left += 1
ans = max(ans, right - left + 1) # 更新答案
print(ans)
六、800. 数组元素的目标和 - AcWing题库
# 双指针
n, m, target = map(int, input().split())
alist = list(map(int, input().split()))
blist = list(map(int, input().split()))
i, j = 0, m - 1
while i < n and j >= 0:
x, y = alist[i], blist[j]
if x + y == target:
print(i, j)
break
elif x + y > target:
j -= 1
else:
i += 1
七、2816. 判断子序列 - AcWing题库
# 模拟
n, m = map(int, input().split())
short_list = list(map(int, input().split()))
long_list = list(map(int, input().split()))
i, j = 0, 0
while i < n and j < m:
if short_list[i] == long_list[j]:
i += 1
j += 1
else:
j += 1
print('Yes' if i == n else 'No')
完
感谢你看到这里!一起加油吧!