前缀和

 

一、什么是前缀和

前缀和是一种预处理,用于降低查询时的时间复杂度。

举个例子:给定 n 个整数,然后进行 m 次询问,每次询问求一个区间内值的和。

如果用暴力写法,那每次询问都需要从区间左端点循环到区间右端点求和,时间复杂度较大。

这种时候就可以预先求出该数组的一维前缀和。

则 ans=s[R]-s[L-1] ,其中 L 和 R 是给定的区间。每次询问可直接输出答案,这样时间复杂度就降到了 O(N+M)

二、前缀和的实现

 1、一维前缀和: 用数组preSum[i]表示nums的前i项和,i从1开始

前缀和

preSum[ i ]=preSum[ i-1 ] + nums[ i ]   

一般用于求区间[l,r]的值

ans = preSum[ r ] - preSum[ l-1 ]

 

2、二维前缀和: 用数组S[i][j]表示前i项,前j项的总和, i , j 从1开始

前缀和

preSum[ i ][ j ] = preSum[ i-1 ][ j ] + preSum[ i ][ j-1 ] + nums[ i ][ j ] - preSum[ i-1 ][ j-1 ]

用于求子矩阵 (x1,y1) (x2,y2)的值

ans = preSum[ x2 ][ y2 ] - preSum[ x2 ][ y1-1 ] - preSum[ x1-1 ][ y2 ] + preSum[ x1-1 ][  y1-1 ]

前缀和

 

原文链接:https://www.cnblogs.com/carrotbinbin1F/p/17317642.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:前缀和 - Python技术站

(0)
上一篇 2023年4月17日
下一篇 2023年4月17日

相关文章

  • day3 函数的定义和调用,练习编写简单的程序(记录1)

    一、函数的定义 可以分为以下两种: 1、函数声明和函数定义分离 这种方法将函数声明和函数定义分开,通常在头文件中先声明函数原型,然后在源文件中实现函数定义。 例如,头文件 example.h 中声明了一个函数 add: #ifndef EXAMPLE_H #define EXAMPLE_H int add(int a, int b); // 声明函数原型 #…

    C++ 2023年4月18日
    00
  • 07、【算例】openfoam带孔盘体应力分析

    官网:https://doc.cfd.direct/openfoam/user-guide-v9/platehole$FOAM_TUTORIALS/stressAnalysis/solidDisplacementFoam下的案例 1、网格划分 /*——————————–*- C++ -*—————…

    C++ 2023年4月18日
    00
  • Qt源码阅读(四) 事件循环

    事件系统 文章为本人理解,如有理解不到位之处,烦请各位指正。 @ 目录 事件系统 什么是事件循环? 事件是如何产生的? sendEvent postEvent 事件是如何处理的? 事件循环是怎么遍历的? 事件过滤器 event 夹带私货时间 Qt的事件循环,应该是所有Qter都避不开的一个点,所以,这篇博客,咱们来了解源码中一些关于Qt中事件循环的部分。先抛…

    C++ 2023年4月18日
    00
  • XMake学习笔记(1):Windows(MSYS2)下MinGW-w64环境搭建和XMake安装

    以前写的C++基本都是C with STL,大多是面向过程的算法题,或者比较小的项目,然后经常报各种编译错误(对编译原理不熟),经常把人搞到崩溃,搞不懂构建、链接之类的东西。 现在开始记录一下XMake的学习笔记,记录一些学习过程中踩的坑,在这篇文章,你将学习到Windows下利用MSYS2进行Mingw-w64环境搭建和XMake安装,并用Xmake构建一…

    C++ 2023年4月30日
    00
  • 如何将 Spire.Doc for C++ 集成到 C++ 程序中

    Spire.Doc for C++ 是一个专业的 Word 库,供开发人员在任何类型的 C++ 应用程序中阅读、创建、编辑、比较和转换 Word 文档。 本文演示了如何以两种不同的方式将 Spire.Doc for C++ 集成到您的 C++ 应用程序中。 通过 NuGet 安装 Spire.Doc for C++ 通过手动导入库安装 Spire.Doc f…

    C++ 2023年4月27日
    00
  • 二分查找算法讲解及其C++代码实现

    二分查找算法是一种常用的查找算法,也被称为折半查找。它可以在有序的数组或列表中快速查找需要的元素。 算法描述: 首先确定数组的中间位置mid=(left+right)/2; 然后将要查找的值key与中间位置的值进行比较; 如果key等于中间位置的值,则查找成功,返回mid; 如果key小于中间位置的值,则在左半部分继续查找; 如果key大于中间位置的值,则在…

    C++ 2023年4月30日
    00
  • 【Visual Leak Detector】配置项 SkipHeapFreeLeaks

    说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记。本篇介绍 VLD 配置文件中配置项 SkipHeapFreeLeaks 的使用方法。同系列文章目录可见 《内存泄漏检测工具》目录 目录 说明 1. 配置文件使用说明 2. 设置是否跳过堆内存泄漏检测 2.1 测试代码 2.2 SkipHeapFreeLeaks = no 时的输出 2.3 Skip…

    C++ 2023年4月18日
    00
  • P6818 [PA2013]Działka 题解

    P6818 [PA2013]Działka 前言 我太菜了。。。。 对着 jiangly 大佬的题解研究了一下午研究了一下午才搞出来(泪目。 作为一个蒟蒻,我就详细的讲一下我对与本题的理解。 题意 本题的的题意描述的还是比较明了。 在二维坐标系中,输入 \(n\) 个点 \(m\) 次询问, 每次询问,给出一个矩阵, 求出矩阵内极大凸包的面积。 题解 1.如…

    C++ 2023年4月30日
    00
合作推广
合作推广
分享本页
返回顶部