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

在线做头像网站做热饮店网站

在线做头像网站,做热饮店网站,房地产政策政策最新消息,芜湖南陵网站建设一、一维前缀和 定义 对于数组(a)&#xff0c;其前缀和数组(s)定义为(s[i]aa[1]... a[i])&#xff0c;主要用途是快速计算数组中任意区间的和。 用法 初始化前缀和数组 代码实现&#xff1a; int a[N]; // 原数组 int s[N]; // 前缀和数组 s[0]a[0]; for (int i 1; i < …

一、一维前缀和

  1. 定义
    • 对于数组(a),其前缀和数组(s)定义为(s[i]=a+a[1]+... +a[i]),主要用途是快速计算数组中任意区间的和。
  2. 用法
    • 初始化前缀和数组
      • 代码实现:
        int a[N];  // 原数组
        int s[N];  // 前缀和数组
        s[0]=a[0];
        for (int i = 1; i < N; i++) {s[i]=s[i - 1]+a[i];
        }
        
    • 查询区间和
      • 若查询区间([l,r])的和,可使用(s[r]-s[l - 1])。若(l == 0),则直接返回(s[r])。
      • 代码实现:
        int query(int l, int r) {if (l == 0) return s[r];return s[r]-s[l - 1];
        }
        
  3. 示例
    • 代码示例:
      #include <stdio.h>
      #define N 5
      int main() {int a[N]={1,2,3,4,5};int s[N];s[0]=a[0];for (int i = 1; i < N; i++) {s[i]=s[i - 1]+a[i];}printf("Sum from index 1 to 3: %d\n", query(1,3));  // 输出: 9return 0;
      }
      

二、二维前缀和

  1. 定义
    • 对于二维数组(a),其前缀和数组(s)定义为(s[i][j]=a[0][0]+..... +a[i][j]),主要用途是快速计算二维数组中任意子矩阵的和。
  2. 用法
    • 初始化前缀和数组
      • 代码实现:
        int a[N][M];  // 原二维数组
        int s[N][M];  // 前缀和数组
        s[0][0]=a[0][0];
        for (int i = 1; i < N; i++) {s[i][0]=s[i - 1][0]+a[i][0];
        }
        for (int j = 1; j < M; j++) {s[0][j]=s[0][j - 1]+a[0][j];
        }
        for (int i = 1; i < N; i++) {for (int j = 1; j < M; j++) {s[i][j]=s[i - 1][j]+s[i][j - 1]-s[i - 1][j - 1]+a[i][j];}
        }
        
    • 查询子矩阵和
      • 若查询子矩阵((x1,y1))到((x2,y2))的和,可使用(s[x2][y2]-s[x1 - 1][y2]-s[x2][y1 - 1]+s[x1 - 1][y1 - 1])。若(x1 == 0)或(y1 == 0),则需特殊处理。
      • 代码实现:
        int query(int x1, int y1, int x2, int y2) {if (x1 == 0 && y1 == 0) return s[x2][y2];if (x1 == 0) return s[x2][y2]-s[x2][y1 - 1];if (y1 == 0) return s[x2][y2]-s[x1 - 1][y2];return s[x2][y2]-s[x1 - 1][y2]-s[x2][y1 - 1]+s[x1 - 1][y1 - 1];
        }
        
  3. 示例
    • 代码示例:
      #include <stdio.h>
      #define N 3
      #define M 3
      int main() {int a[N][M] = {{1,2,3},{4,5,6},{7,8,9}};int s[N][M];s[0][0]=a[0][0];for (int i = 1; i < N; i++) {s[i][0]=s[i - 1][0]+a[i][0];}for (int j = 1; j < M; j++) {s[0][j]=s[0][j - 1]+a[0][j];}for (int i = 1; i < N; i++) {for (int j = 1; j < M; j++) {s[i][j]=s[i - 1][j]+s[i][j - 1]-s[i - 1][j - 1]+a[i][j];}}printf("Sum from (1,1) to (2,2): %d\n", query(1,1,2,2));  // 输出: 28return 0;
      }
      

s[i][j]=s[i - 1][j]+s[i][j - 1]-s[i - 1][j - 1]+a[i][j];此代码可转化为子矩阵面积来理解

三、总结

  • 一维前缀和:用于快速计算数组中任意区间的和。
  • 二维前缀和:用于快速计算二维数组中任意子矩阵的和。
  • 这两种前缀和技巧在处理区间和问题时非常高效,能够将时间复杂度从(O(n))或(O(n^{2}))降低到(O(1))。
http://www.dtcms.com/wzjs/803038.html

相关文章:

  • 芮城网站建设小程序开发平台到底哪家好
  • 网站建设都是用什么软件如何做网站教学
  • 外链查询sem和seo的关系
  • 公司网站主页怎么做创意营销策划方案
  • 国内外创意网站欣赏怎么提高seo关键词排名
  • 虚拟主机如何做网站网站空间查询工具
  • 编程网站开发培训临夏州住房和城乡建设局网站
  • 巴彦淖尔专业做网站的公司企业品牌推广公司哪家好
  • 河南省教育类网站前置审批公众号如何推广产品
  • 滨州网站建设电话网络服务商
  • 响应式网站开发的理解公司网站设计哪家好
  • 遵义县公司网站建设网站建设的公司这个
  • 浙江建设继续教育学院网站网站上线前的准备
  • 多个域名指定同一个网站好处网络广告营销案例分析
  • 网站平台建设制度国外免费建站
  • 视频直播app开发网站海报模板免费下载网站
  • 永康公司网站建设做网站的大创结项
  • 企业网站制作方案注册帐号
  • 安徽省干部建设教育网站wordpress 小程序教程
  • 东莞网站建设网站推广价钱app开发报价公司
  • 公众号怎么做网站网站 优点
  • 做网站设计的公司柳州wordpress主题 仿36氪
  • 做交易网站存在什么风险延安网站建设网络公司
  • 在线学习软件开发网站建设外包公司属于什么行业
  • 做网站去哪里接单网络运维工程师需要什么证
  • 专业公司网站 南通怎么做网站代拍
  • 深圳网站软件网站建设展馆设计收费标准
  • 关于文艺网站建设政策小说类型网站怎么做
  • 足彩网站开发wordpress网站二次开发
  • 哪个网站可以做危险化学品供求深圳网站建站的公司