当前位置: 首页 > news >正文

差分

一维差分

差分就是数组前面的一个元素减去后面的一个元素所得到的一个含义为两元素差值的数组

image-20260520082353228

image-20260520082407489

while True:try:n,m=map(int,input().split())a=list(map(int,input().split()))diff=[0]*(n+1)###防止尾出错diff[0]=a[0]for i in range(1,n):diff[i]=a[i]-a[i-1]for _ in range(m):x,y,z=map(int,input().split())x=x-1y=y-1diff[x]+=zdiff[y+1]-=za[0]=diff[0]###这个很重要,防止头出错for i in range(1,n):a[i]=a[i-1]+diff[i]print("  ".join(map(str,a)))except:break

二维差分

diff(i,j)=a(i,j)-a(i-1,j)-a(i,j-1)+a(i-1,j-1) (即sum替换成a a替换成diff)
n,m=map(int,input().split())
a=[[0]*(m+1) for i in range(n+1)]
diff=[[0]*(m+1) for i in range(n+1)]
for i in range(1,n+1):a[i]=[0]+list(map(int,input().split()))
for i in range(1,n+1):for j in range(1,m+1):diff[i][j]=a[i][j]-a[i-1][j]-a[i][j-1]+a[i-1][j-1]

image-20260219095637212

def print_matrix(matrix, name):"""辅助函数:打印矩阵"""print(f"--- {name} ---")for row in matrix:print("\t".join(map(str, row)))print()# 1. 初始化原始矩阵 a (图中的左上角矩阵)
# 注意:为了方便对应图中的坐标 (1,1) 开始,我们在外面包一圈 0
# 实际数据从索引 1 开始
a = [[0, 0, 0, 0, 0],[0, 1, 2, 3, 4],[0, 5, 6, 7, 8],[0, 9, 10, 11, 12],[0, 13, 14, 15, 16]
]n = 4  # 矩阵大小 4x4# 2. 构建差分数组 diff (图中的右上角矩阵)
# 差分数组的定义:diff[i][j] = a[i][j] - a[i-1][j] - a[i][j-1] + a[i-1][j-1]
diff = [[0] * (n + 1) for _ in range(n + 1)]for i in range(1, n + 1):for j in range(1, n + 1):diff[i][j] = a[i][j] - a[i-1][j] - a[i][j-1] + a[i-1][j-1]print("初始 diff 矩阵:")
print_matrix(diff, "diff")# 3. 核心操作:在子矩阵 (x1, y1) 到 (x2, y2) 增加 val
# 图中是:从 (2,2) 到 (3,3) 增加 3
x1, y1 = 2, 2
x2, y2 = 3, 3
val = 3def update_diff(diff, x1, y1, x2, y2, val):"""二维差分数组更新公式"""diff[x1][y1] += val          # 左上角 +valdiff[x2 + 1][y2 + 1] += val  # 右下角 +val (抵消多加的)diff[x1][y2 + 1] -= val      # 右上角 -val (消除影响)diff[x2 + 1][y1] -= val      # 左下角 -val (消除影响)update_diff(diff, x1, y1, x2, y2, val)print(f"更新操作:区域 ({x1},{y1}) 到 ({x2},{y2}) 增加 {val}")
print_matrix(diff, "更新后的 diff (对应图中右下角)")# 4. 还原矩阵 (求二维前缀和)
# 通过 diff 还原出新的 a
new_a = [[0] * (n + 1) for _ in range(n + 1)]for i in range(1, n + 1):for j in range(1, n + 1):# 前缀和公式:当前值 = 上 + 左 - 左上 + 差分new_a[i][j] = new_a[i-1][j] + new_a[i][j-1] - new_a[i-1][j-1] + diff[i][j]print("最终还原的矩阵 a (对应图中左下角):")
print_matrix(new_a, "new_a")# 验证结果 (打印不带外围0的部分)
print("结果验证 (仅数据部分):")
for i in range(1, n + 1):print([new_a[i][j] for j in range(1, n + 1)])
http://www.jsqmd.com/news/851147/

相关文章:

  • 对比直接使用官方 API 体验 Taotoken 在路由与容灾上的差异
  • 金融行业:OpenClaw批量处理理财客户信息、生成理财方案,提升服务效率
  • VSCode里Code Runner跑Python总报9009?别慌,检查一下你的setting.json文件
  • 武汉新鹏源环保工程:黄陂专业的不锈钢制品加工公司推荐几家 - LYL仔仔
  • 告别纯理论:手把手教你用Simulink复现三相电机调压调速,看波形学控制
  • 从Anaconda到PyTorch:搞懂conda安装的cudatoolkit和系统CUDA到底啥关系?
  • 数字生产实践Codex:AI 编程助手进化到桌面办公智能体
  • 福州晋安鼓山李国秀保洁:长乐居家开荒保洁公司选哪家 - LYL仔仔
  • 别再只让电机傻转了!给JGB37-520加上TB6612和STM32编码器模式,实现精准速度与位置控制
  • 别再只调步数了!So-VITS-SVC音质优化的三个隐藏开关:编码器、F0和响度匹配
  • python的enum通过int进行初始化
  • Unity 2D基础:Rigidbody2D刚体的运动控制
  • 告别VS Code!用CLion 2024.3 + CUDA 12.1搭建高效GPU开发环境(附CMake配置避坑指南)
  • AMD Ryzen性能调优终极指南:SMUDebugTool完全掌握教程
  • 亨得利高端腕表售后维修地址查询:2026年5月全国七大官方网点汇总(附百达翡丽、江诗丹顿、爱彼、理查德・米勒、宝玑、宝珀、朗格、积家、卡地亚、欧米茄、劳力士等品牌服务指南) - 亨得利腕表维修中心
  • AsNumpy vs NumPy:昇腾NPU加速下的1000×1000矩阵运算性能对比实测
  • 【信息科学与工程学】【物理/化学科学和工程技术】知识体系32 对称性破缺
  • 社保基金管理系统全解析:核心痛点、核心功能、应用场景、价值、案例、FAQ(2026)
  • 精通AI斗地主:3个实战步骤实现智能出牌决策
  • Android Studio中文界面配置:专业开发者效率提升指南
  • 2026平阳口.腔医院排行榜:这几家实力派上榜 - 速递信息
  • Slide离线阅读功能详解:随时随地浏览Reddit内容的完整教程
  • 2026曲靖婚纱摄影综合实力排名|五大权威维度,本地口碑甄选榜单 - charlieruizvin
  • CANN hy3-preview模型优化报告
  • 2026年新疆穴位压力刺激贴选购指南|禹孚生物无源物理理疗专家深度评测 - 优质企业观察收录
  • 如何高效无损合并B站缓存视频:3种m4s转MP4方案详解
  • 告别定时器PWM!用STM32F407的IIC接口驱动PCA9685控制多路舵机全攻略
  • 系统转换之后,定制开发怎么收口:从 SAP S/4HANA Custom Code 迁移修复到 Clean Core 的一条完整路径
  • 本地构建大模型服务
  • 终极AMD Ryzen调试指南:简单三步掌握硬件性能调优