前綴和——DP35 【模板】二維前綴和

在這里插入圖片描述

文章目錄

    • 🍎1. 題目
    • 🍒2. 算法原理
    • 🍅3. 代碼實現

🍎1. 題目

題目鏈接:【模板】二維前綴和_牛客題霸_牛客網 (nowcoder.com)

描述

給你一個 n 行 m 列的矩陣 A ,下標從1開始。

接下來有 q 次查詢,每次查詢輸入 4 個參數 x1 , y1 , x2 , y2

請輸出以 (x1, y1) 為左上角 , (x2,y2) 為右下角的子矩陣的和,

輸入描述:

第一行包含三個整數n,m,q.

接下來n行,每行m個整數,代表矩陣的元素

接下來q行,每行4個整數x1, y1, x2, y2,分別代表這次查詢的參數

1 ≤ n ≤ 1000
1 ≤ q ≤ 105
-109 ≤ a[i] [j] ≤ 109
1 ≤ x1 ≤ x2 ≤ n
1 ≤ y1 ≤ y2 ≤ m

輸出描述:

輸出q行,每行表示查詢結果。

示例1

輸入:

3 4 3
1 2 3 4
3 2 1 0
1 5 7 8
1 1 2 2
1 1 3 3
1 2 3 4

輸出:

8
25
32

備注:

讀入數據可能很大,請注意讀寫時間。

這題就是一個升級版的前綴和——DP34 【模板】前綴和,將一維數組升級成了二維數組

image-20231122214754624

🍒2. 算法原理

解法一:暴力模擬

這里照樣直接模擬,要哪個區間到哪個區間,我們直接遍歷加上,這里時間復雜度為O(nmq)

解法二:前綴和

采用前綴和方法,分為2步:

  1. 預處理出來一個前綴和矩陣,dp[i][j]表示[1,1]位置到[i,j]位置
    image-20231122230806157
    如果我們求dp[i][j]的時候依舊從前往后依次遍歷,那這個時間復雜度也是蠻高的,我們可以將要求的dp[i][j]抽象成4個部分:
    image-20231122232002954
    那么則有dp[i][j] = A + B + C + D,其中A和D好求,B區域可以理解為(A+B)-A,C也同理(A+C)-A,這樣就能推出dp[i][j] = (A+B)+(A+C)+D-A

    所以dp[i][j] = dp[i-1][j] + dp[i][j-1] + arr[i][j] - dp[i-1][j-1],這樣之后我們就可以直接從dp表里面拿值了,這個時間復雜度為O(1)

  2. 使用前綴和矩陣,假設我們求得區域為[x1,y1] ~ [x2,y2]
    image-20231122233348002
    我們要求的就是D區域,但是dp表里面,沒有D區域的直接值,但D = (A+B+C+D) - (A+B) - (A+C) + A,表里面有AA+BA+C的值,所以D = dp[x2][y2] -dp[x1-1][y2] - dp[x2][y1-1] + dp[x1-1][y1-1],得出這個公式,那我們每次使用這個前綴和矩陣的時候,時間復雜度也是O(1)。

那么整體的時間復雜度為O(mn)+O(q)

🍅3. 代碼實現

#include <iostream>
#include<vector>
using namespace std;int main()
{int n = 0,m = 0,q = 0;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];//預處理前綴和矩陣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]+arr[i][j]-dp[i-1][j-1];//使用前綴和矩陣int x1 = 0,x2 = 0,y1 = 0, y2 = 0;while(q--){cin>>x1>>y1>>x2>>y2;    //輸入順序cout<<dp[x2][y2]-dp[x1-1][y2]-dp[x2][y1-1]+dp[x1-1][y1-1]<<endl;}return 0 ;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/161583.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/161583.shtml
英文地址,請注明出處:http://en.pswp.cn/news/161583.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ElasticSearch的日志配置

ElasticSearch默認情況下使用Log4j2來記錄日志&#xff0c;日志配置文件的路徑為$ES_HOME/config/log4j2.properties&#xff0c;配置方法見Log4j2的官方文檔。 參考path-settings&#xff0c;通過指定path.logs&#xff0c;可以指定日志文件的保存路徑。 在日志配置文件$ES_…

【OpenCV實現圖像:使用OpenCV生成拼圖效果】

文章目錄 概要通用配置不考慮間隔代碼實現考慮間隔代碼實現小結 概要 概要&#xff1a; 拼圖效果是一種將圖像切割為相鄰正方形并重新排列的藝術效果。在生成拼圖效果時&#xff0c;可以考慮不同的模式&#xff0c;包括是否考慮間隔和如何處理不能整除的部分。 不考慮間隔&a…

【NLP】GPT 模型如何工作

介紹 2021 年&#xff0c;我使用 GPT 模型編寫了最初的幾行代碼&#xff0c;那時我意識到文本生成已經達到了拐點。我要求 GPT-3 總結一份很長的文檔&#xff0c;并嘗試了幾次提示。我可以看到結果比以前的模型先進得多&#xff0c;這讓我對這項技術感到興奮&#xff0c;并渴望…

HQL刷題 50道

HQL刷題 50道 尚硅谷HQL刷題網站 答案 1.查詢累積銷量排名第二的商品 select sku_id from (select sku_id, dense_rank() over (order by total desc) rnfrom (select sku_id, sum(sku_num) totalfrom order_detailgroup by sku_id) t1) t2 where rn 2;2.查詢至少連續三天下…

php 時區查看和設置

php的時區&#xff0c;關系到相關時間函數的結果 其他相關&#xff1a; linux時區設置&#xff1a;鏈接 pgsql時區設置&#xff1a; 一、查看可以用的時區列表 新建一個php文件&#xff0c;輸入下面程序即可 <?php echo "<pre>"; var_dump(timezone_id…

基于go-zero的rpc服務示例

以下是一個基于 go-zero 框架的簡單 RPC 服務示例&#xff0c;該示例包括一個服務端和一個客戶端通過 gRPC 進行通信。 服務端 1、定義 .proto 文件 在 rpc/add 目錄下創建 adder.proto 文件&#xff0c;定義 RPC 服務&#xff1a; syntax "proto3";package add…

IOS+Appium+Python自動化全實戰教程

由于公司的產品坐落于不同的平臺&#xff0c;如ios、mac、Android、windows、web。因此每次有新需求的時候&#xff0c;開發結束后&#xff0c;留給測試的時間也不多。此外&#xff0c;一些新的功能實現&#xff0c;偶爾會影響其他的模塊功能正常的使用。 網上的ios自動化方面的…

MyBatis-Plus的分頁插件和樂觀鎖插件

MyBatis-Plus: 探索分頁查詢和樂觀鎖插件 在現代的Web應用開發中&#xff0c;高效的數據處理是不可或缺的一部分。MyBatis-Plus&#xff0c;作為MyBatis的增強版&#xff0c;提供了多種插件來簡化和優化數據庫操作。在這篇博客中&#xff0c;我們將重點介紹兩個非常實用的插件…

09_面向對象高級_泛型

泛型 1. 認識泛型 定義類、接口、方法時&#xff0c;同時聲明了一個或多個類型變量&#xff08;如&#xff1a;&#xff09;&#xff0c;稱為泛型類、泛型接口、泛型方法、它們統稱為泛型。 2. 泛型類 public class Test {public static void main(String[] args) {MyArray…

計算機網絡之物理層(數據通信有關)

一、概述 1.1物理層引入的目的 屏蔽掉傳輸介質的多樣性&#xff0c;導致數據傳輸方式的不同&#xff1b;物理層的引入使得高層看到的數據都是統一的0,1構成的比特流 1.2.物理層如何實現屏蔽 物理層靠定義的不同的通信協議&#xff08;一般稱通信規程&#xff09; 這些協議…

基于高質量訓練數據,GPT-4 Turbo更出色更強大

11月7日消息&#xff0c;OpenAI在首屆開發者大會上正式推出了GPT-4 Turbo。 與GPT-4相比&#xff0c;GPT-4 Turbo主要有6方面的提升&#xff1a; 1、擴展下文對話長度&#xff1a;GPT4最大只能支持8k的上下文長度&#xff08;約等于6000個單詞&#xff09;&#xff0c;而GPT-4…

智能小車速通版——手把手教程

考慮到大部分學校&#xff0c;會發放簡易小車來作為智能車初期培訓和篩選的工具&#xff0c; 于是&#xff0c;我寫一個簡單的教程&#xff0c;能夠實現簡單小車的電磁循跡。 通過這個教程&#xff0c;能夠通過簡化的步驟搭建尋跡小車&#xff0c;進而了解整個智能車是如何實…

Redis-Redis持久化,主從哨兵架構詳解

Redis持久化 RDB快照&#xff08;snapshot&#xff09; 在默認情況下&#xff0c; Redis 將內存數據庫快照保存在名字為 dump.rdb 的二進制文件中。 你可以對 Redis 進行設置&#xff0c; 讓它在“ N 秒內數據集至少有 M 個改動”這一條件被滿足時&#xff0c; 自動保存一次數…

【操作系統】I/O軟件層次結構

文章目錄 1. 前言2. I/O軟件層次結構2.1 用戶層軟件2.2 設備獨立性軟件2.3 設備驅動程序2.4 中斷處理程序 1. 前言 偶然看到“程序員的護城河是什么”這個話題&#xff0c;作為一個工作兩年多的程序員吧&#xff0c;經常看到網上關于各種35歲危機、裁員甚至猝死之云云。最近也…

modbus協議及modbus TCP協議

一、Modbus協議 1.起源 Modbus由Modicon公司于1979年開發&#xff0c;是一種工業現場總線協議標準。 Modbus通信協議具有多個變種&#xff0c;其中有支持串口&#xff0c;以太網多個版本&#xff0c;其中最著名的是Modbus RTU&#xff08;通信效率最高&#xff0c;基于串口&am…

springboot前后端分離項目配置https接口(ssl證書)

文章目錄 說明vue.js前端部署vue.js項目axios請求配置本地創建日志文件創建Dockerfile文件配置ssl證書nginx.confvue項目打包上傳創建容器部署 后端springboot項目部署配置ssl證書打包部署 補充&#xff1a;jsk證書和pfx證書補充&#xff1a;兩種證書的轉化JKS轉PFXPFX 轉 JKS …

Elasticsearch:將最大內積引入 Lucene

作者&#xff1a;Benjamin Trent 目前&#xff0c;Lucene 限制 dot_product (點積) 只能在標準化向量上使用。 歸一化迫使所有向量幅度等于一。 雖然在許多情況下這是可以接受的&#xff0c;但它可能會導致某些數據集的相關性問題。 一個典型的例子是 Cohere 構建的嵌入&#x…

使用 Lhotse 高效管理音頻數據集

Lhotse 是一個旨在使語音和音頻數據準備更具靈活性和可訪問性的 Python 庫&#xff0c;它與 k2 一起&#xff0c;構成了下一代 Kaldi 語音處理庫的一部分。 主要目標&#xff1a; 1. 以 Python 為中心的設計吸引更廣泛的社區參與語音處理任務。 2. 為有經驗的 Kaldi 用戶提供…

SpringBoot——啟動類的原理

優質博文&#xff1a;IT-BLOG-CN SpringBoot啟動類上使用SpringBootApplication注解&#xff0c;該注解是一個組合注解&#xff0c;包含多個其它注解。和類定義SpringApplication.run要揭開SpringBoot的神秘面紗&#xff0c;我們要從這兩位開始就可以了。 SpringBootApplicati…

Spring實例化對象

默認proxyBeanMethods true&#xff0c;這種方法是用的代理模式創建對象&#xff0c;每次創建都是同一個對象&#xff0c;如果改為false每次都是不同的對象 FactoryBean的使用 定義的類A&#xff0c;造出來一個類B&#xff0c;可以在創造bean之前做一些自己的個性化操作