差分数组(python)

本文介绍了差分数组的概念,包括一维和二维的定义,以及它们在处理区间更新问题中的作用。重点讲解了如何构造差分数组,对区间进行加减操作,并举例说明了如何通过面积推导解决特定问题。解题步骤包括构造差分数组、对差分数组操作并还原原始值。
摘要由CSDN通过智能技术生成

一维差分数组

概念:

通俗点就是将an-an-1存储成为一个新数组,名为差分数组。

那么差分数组用来干嘛呢?联系之前提到过的前缀和的知识点,其可以对一个区间内所有的元素进行同样的加减(因为对差分数组进行加减,差分数组中的每一个元素的前缀和都会受到影响,其前缀和是an,也就是an会受到影响。)

 例题

蓝桥3291 区间更新

import os
import sys

# 请在此输入您的代码
#若干组测试数据,不知道会输入几组时用这个结构
while 1:
  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 -= 1
      y -= 1 #数据下标从1开始
      diff[x] += z #从x下标+z
      diff[y+1] -= z #从y下标开始恢复原样

    a[0] = diff[0]
    for i in range(1, n):
      a[i] = diff[i] + a[i - 1] #根据递推式反推a[i]
    b = " ".join(map(str, a)) 
    print(b)

  except:
    break

二维差分数组

概念

依然可以用面积推导

想要让蓝色矩阵内所有元素加上3,注意上篇章前缀和推导的面积是和左上角有关,而这是跟右下角有关,因为这是差分数组,每一个元素进行加减会影响后面的元素,而并不是前面的,是想让某一个区间内所有的元素进行加减运算,而差分数组只要加一个元素,其后面的所有前缀和都会改变。(都会加3)那么用面积进行推导。

  • 蓝色矩形面积=左图红色矩形面积-有图两个长方形的面积+正方形的面积
  • 因为除了你想改变的矩阵,其他元素要保持不变,所以要减回去(-3)最后一个元素+3是因为其被算了两次。

总结:

差分数组就是两个元素相减组成的新数组

解题步骤:

  1. 构造差分数组
  2. 对差分数组对应元素进行加减
  3. 还原a[i]或者a[i][j]
  4. 进行输出

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
自动组卷评分系统是一种用于生成和评分试卷的软件工具,该系统使用Python编程语言编写。 自动组卷评分系统的源代码包括了实现试卷生成与评分的各种功能和算法。其中包括了试题数据库的设计和管理、试题抽取算法、试卷生成算法,以及试卷评分算法等。 系统的试题数据库存储了各种类型的试题,包括选择题、填空题、简答题等。每个试题都包括题目、选项、答案等关键信息。通过对试题数据库进行查询和抽取,系统可以根据教师的需求生成符合要求的试卷。 试题抽取算法根据教师指定的要求,从试题数据库中抽取一定数量的试题,保证试题的类型和难度符合指定要求。试卷生成算法根据抽取的试题生成试卷,并提供导出功能,支持生成Word、PDF等格式的试卷。 试卷评分算法用于自动评分试卷。根据试题的答案以及每个试题的得分权重,系统可以自动计算学生的得分,减轻教师的评分工作量。评分结果可以实时显示,也可以导出为Excel表格等格式进行保存和打印。 此外,自动组卷评分系统还提供了一些辅助功能,如生成试题解析、题库管理、学生答题情况统计等。 通过使用自动组卷评分系统,教师可以节省大量的试卷生成和评分时间,提高工作效率。同时,学生也可以及时获得准确的分数和反馈,有助于提高学习效果。 总之,自动组卷评分系统的源代码使用Python编写,实现了试题数据库管理、试题抽取、试卷生成、试卷评分等功能,为教师的试卷工作提供了便利,同时也提升了学生的学习体验和学习效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值