优选算法_前缀和_二维前缀(模板)_C++

优选算法_前缀和_二维前缀(模板)_C++

一.题目分析

这里题目不好理解,就是一个指定大小的矩阵(n行m列),然后再给出两个坐标,之后求两坐标所围成矩阵的和

1.暴力解法->模拟:询问一次就求一次和,所以时间复杂度是q*m*n

2.前缀和

        1.预处理一个前缀和矩阵

我们发现抽出的BC的面积并不好求,所以我们就求好求的面积减去多余面积即可

        

        2.使用前缀和矩阵

二.代码实现

#include<iostream> #include<vector> int mian() { //1.读入数据 int n, m,q; cin >> n >> m >> q; vector<vector<int>>arr(n + 1, vector<int>(m + 1)); for (int i = 1;i <= n;i++) for (int j = 1;j = m;j++) cin >> arr[i][j]; //2.预处理前缀和矩阵 vector<vector<long long>>dp(n + 1, vector<long long>(m + 1)); for (int i = 1;i <= n;i++) for (int j = 1;j = m;j++) dp[i][j] = dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1] + arr[i][j]; //3.使用前缀和矩阵 int q; cin >> q; while (q) { int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2; cout<< dp[x2][y2] - dp[x1 - 1][y2] - dp[x2][y1 - 1] + dp[x1][y1]; } return 0; }
ps:我们矩阵是从(1,1)开始的因为会有越界的情况,相加就是dp[0][0]=0;相乘就是dp[0][0]=1;需要考虑边界情况;

Read more

【数据结构初阶第十五节】堆的应用(堆排序 + Top-K问题)

【数据结构初阶第十五节】堆的应用(堆排序 + Top-K问题)

必须有为成功付出代价的决心,然后想办法付出这个代价。云边有个稻草人-ZEEKLOG博客 对于本节我们要提前掌握前一节课堆的相关实现才能学好本次的知识,一定要多画图多敲代码看看实现的效果是啥(Crazy!)开始吧! 目录 一、堆排序 (一) 基于原有堆 (二) 原数组上直接建堆 1.向上调整算法建堆 2.向上调整算法建堆时间复杂度 3.向下调整算法建堆 4.向下调整算法建堆时间复杂度 二、TOP-K问题         ——————————————《Being in love》——————————————   一、堆排序 (一) 基于原有堆 结合下面的代码观看——创建一个数组,将数组里面的数据不断地入堆后建立了一个堆(假设是一个小堆),不断取堆顶数据打印后出堆(此操作循环),这样就可以实现排序。为什么这样就实现了排序呢?Because小堆的堆顶是堆里面的最小值,出堆时向下调整又变成了小堆,此时堆顶是剩下元素里面的最小值,就这样不断取堆顶(最小值)实现了升序操作。 但是,这样的排序方法我们必须提前实现一个堆,而且我们实现堆操作时至少要申请一块原排

By Ne0inhk
从零开始学java--二叉树和哈希表

从零开始学java--二叉树和哈希表

数据结构基础 目录 数据结构基础 树 树形结构: 树的概念: 二叉树 概念: 两种特殊的二叉树: 二叉树的性质: 创建一个简单的二叉树: 二叉树的遍历 前序遍历: 中序遍历: 后序遍历: 层序遍历: 二叉查找树和平衡二叉树 二叉查找树: 平衡二叉树: 红黑树 哈希表 树 树形结构: 树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 1. 有一个特殊的结点,称为根结点,根结点没有前驱结点。 2. 除根结点外,其余结点被分成M(M > 0)个互不相交的集合T1、T2、......、Tm,其中每一个集合Ti (1 <= i

By Ne0inhk
编程竞赛必备算法精解

编程竞赛必备算法精解

枚举 例题 字符计数          反倍数 洁净数 扫雷 模拟 例题 饮料换购 图像模糊 螺旋矩阵 回文日期 长草 注意:该参考代码仅通过80%,仅作学习模拟的参考 最大距离 进制转换 例题 前缀和 一维前缀和 前缀和:对于一个长度为n的列表a,前缀和为:  sum[i]= a[0]+a[1]+…+a[i] 例如:a= [1,3,4,2,5],前缀和数组sum=[1,4,8,10,15] 前缀和的性质: Sum[i]=Sum[i-1]

By Ne0inhk
阳光算法(改进版):面向密集小障碍物复杂环境的路径规划方法与严谨的O(n)时间复杂度证明

阳光算法(改进版):面向密集小障碍物复杂环境的路径规划方法与严谨的O(n)时间复杂度证明

阳光算法是一种全新的基于采样的平面路径规划方法,该方法的主要思路是通过模仿阳光照射的自然现象搜索到采集地形或障碍物边缘的切点从而快速构建出可行性路径,非常适合于解决迷宫等复杂地形下的全局路径规划问题。该方法在简洁的同时拥有极高的搜索效率,其计算复杂度经证明也比现有的RRT系列算法更低,关于该方法的详细介绍可以参考https://blog.ZEEKLOG.net/seabiscuit1993/article/details/147731476, 本文不再赘述。尽管阳光算法相较于传统路径规划方法具备显著优势,但其在部分环节仍存在严谨性与完备性方面的不足。本文针对传统的阳光算法中存在的问题做出了两个关键性改进,并通过进一步的分析和仿真实验对比,验证了所提改进方案的优越性和有效性。该改进算法已发表在如下期刊。 Yingjie Deng et al 2026 Meas. Sci. Technol. 37 096303,doi:10.1088/1361-6501/ae49b1         首先是地图搜索完备性的问题。阳光算法对于地图的探索主要通过 寻找地形或者障碍图的边缘

By Ne0inhk