算法日記——前綴和、差分

文章目錄

    • 洛谷 B3612 求區間和
    • 洛谷 P1387 最大正方形
    • 洛谷 P3397 地毯

洛谷 B3612 求區間和

題目鏈接:洛谷 B3612 求區間和
思路: 一維前綴和的模板題。所謂前綴和,就是對原數組前i個元素求和,這個值作為新元素放在下標i的位置。
代碼如下:

#include <iostream>
using namespace std;
const int N = 1e5 + 5;
int a[N], sum[N];
int main()
{int n, m;cin >> n;for (int i = 1; i <= n; i++){cin >> a[i];sum[i] += sum[i - 1] + a[i];}cin >> m;while (m--){int l, r;cin >> l >> r;cout << sum[r] - sum[l - 1] << endl;}return 0;
}
  • 時間復雜度 O ( n ) O(n) O(n)
  • 空間復雜度 O ( n ) O(n) O(n)

洛谷 P1387 最大正方形

題目鏈接: 洛谷 P1387 最大正方形
思路: 本題有兩種方法,一種是利用二位前綴和,另一種是利用動態規劃。
代碼如下:
(前綴和)

#include <iostream>
using namespace std;
int n, m;
const int N = 105;
int a[N][N], s[N][N]; 
int ans;//保存最大邊長
int main()
{cin >> n >> m;for(int i = 1; i <= n; i ++ )for (int j = 1; j <= m; j++){cin >> a[i][j];s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + a[i][j];}//枚舉起點和邊長for(int i = 1; i <= n; i ++ )for(int j = 1; j <= m; j ++ )for (int l = 1; l <= min(n, m); l ++ ){int x = i + l - 1, y = j + l - 1;//正方形右下角坐標if (x > n || y > m || s[x][y] - s[x][j - 1] - s[i - 1][y] + s[i - 1][j - 1] != l * l) {break;}if (ans < l) ans = l;}cout << ans << endl;return 0;
}
  • 時間復雜度 O ( m n l ) O(mnl) O(mnl)
  • 空間復雜度 O ( n 2 ) O(n^2) O(n2)

(動態規劃)

#include <iostream>
#include<algorithm>
using namespace std;
const int N = 105;
int a[N][N], f[N][N]; //f[i][j]表示以節點i, j為右下角,可構成的最大正方形的邊長。
int ans;
int main()
{int n, m;cin >> n >> m;for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++){cin >> a[i][j];if (a[i][j] == 1) {f[i][j] = min(f[i - 1][j - 1], min(f[i - 1][j], f[i][j - 1])) + 1;}ans = max(ans, f[i][j]);}cout << ans << endl;return 0;
}
  • 時間復雜度 O ( n 2 ) O(n^2) O(n2)
  • 空間復雜度 O ( n 2 ) O(n^2) O(n2)

洛谷 P3397 地毯

題目鏈接: 洛谷 P3397 地毯
思路: 算是二維差分的模板題吧。所謂差分也就是前綴和的逆運算,也就是說,我們對差分數組求前綴和后得到的數組就是原數組。
代碼如下:

#include <iostream>
#include<algorithm>
using namespace std;
const int N = 1005;
int n, m;
int b[N][N], s[N][N];//b為差分數組,s為原數組(對差分數組求前綴和)int main()
{cin >> n >> m;while (m--){int x1, y1, x2, y2;cin >> x1 >> y1 >> x2 >> y2;b[x1][y1] += 1;b[x1][y2 + 1] -= 1;b[x2 + 1][y1] -= 1;b[x2 + 1][y2 + 1] += 1;}for(int i = 1; i <= n; i ++ )for (int j = 1; j <= n; j++){s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + b[i][j];}for (int i = 1; i <= n; i ++ ) {for (int j = 1; j <= n; j ++ )cout << s[i][j] << " ";cout << endl;}return 0;
}
  • 時間復雜度 O ( m n + n 2 ) O(mn+n^2) O(mn+n2)
  • 空間復雜度 O ( n 2 ) O(n^2) O(n2)

總結: 對于前綴和、差分來說,一般比賽時不會直接作為考點,而是融合在其他類型題目中:比如利用前綴和、差分來對初始數組進行操作,從而方便我們解決問題。

最后,如果文章有錯誤,請在評論區或私信指出,讓我們共同進步!

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

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

相關文章

C++智能指針_C++回顧

發展歷史 C98中產生了第一個智能指針auto_ptr&#xff1b; Cboost給出了更實用的scoped_ptr和shared_ptr和weak_ptr&#xff1b; CTR1&#xff0c;引入了shared_ptr等&#xff0c;不過TR1并不是標準版&#xff1b; C11引入了unique_ptr和shared_ptr和weak_ptr。需要注意的是…

Mamba與MoE架構強強聯合,Mamba-MoE高效提升LLM計算效率和可擴展性

論文題目&#xff1a; MoE-Mamba: Efficient Selective State Space Models with Mixture of Experts 論文鏈接&#xff1a; https://arxiv.org/abs/2401.04081 代碼倉庫&#xff1a; GitHub - llm-random/llm-random 作為大型語言模型&#xff08;LLM&#xff09;基礎架構的后…

新一代科學計算與系統建模仿真平臺MWORKS 2024a震撼發布:產品強勢進化,更新亮點速覽!

2月25日&#xff0c;同元軟控成功舉辦MWORKS 2024產品發布會&#xff0c;會上公布了新版MWORKS的設計理念、關鍵技術、版本亮點、產品特性以及重大改進。當前&#xff0c;科學計算與系統建模仿真平臺MWORKS 2024a已正式上線&#xff0c;開放下載。 MWORKS已成為全球第4個完整的…

全量知識系統問題及SmartChat給出的答復 之6 三套工具之1

Q15. 提出想法和問題 前面說過&#xff0c;DDD在我要設計的全量知識系統中位于中間層&#xff0c;是專門用來解決“知識湯”問題的。 解決的思路就是以將為在特定領域中的公司經營提供一個責任-權限平面為目的&#xff0c;幫助他們調整商業模式以及組建恰當的組織&#xff0c…

C# 高階語法 —— Winfrom鏈接SQL數據庫的存儲過程

存儲過程在應用程序端的使用的優點 1 如果sql語句直接寫在客戶端&#xff0c;以一個字符串的形式體現的&#xff0c;提示不友好&#xff0c;會導致效率降低 2 sql語句寫在客戶端&#xff0c;可以利用sql注入進行攻擊&#xff0c;為了安全性&#xff0c;可以把sql封裝在…

嘉立創專業版導入SW模型的板框

1、SW新建一個需要的模型&#xff0c;例如下圖&#xff0c; 2、點擊另存為.dxf 文件&#xff08;是.dxf文件&#xff09; 3、選擇要保存模型的視圖&#xff0c;如上視圖&#xff0c;確定后出現上視圖板框形狀&#xff0c;然后保存即可。 4、打開嘉立創&#xff0c;點擊文件——…

Linux中的awk命令

AWK是一種在Linux系統中經常使用的文本處理工具&#xff0c;它可以根據指定的模式對文本文件進行處理和分析。下面是一些關于AWK命令的使用說明和舉例&#xff1a; 1. 基本語法&#xff1a; awk pattern { action } file 2. 使用字段分隔符&#xff1a; 默認情況下&#xf…

整數編碼【華為OD機試-JAVAPythonC++JS】

題目描述 實現一種整數編碼方法&#xff0c;使得待編碼的數字越小&#xff0c;編碼后所占用的字節數越小。 編碼規則如下: 編碼時7位一組&#xff0c;每個字節的低7位用于存儲待編碼數字的補碼 字節的最高位表示后續是否還有字節&#xff0c;置1表示后面還有更多的字節&#xf…

pytorch -- GPU優化寫法套路

1. GPU優化的點 網絡模型 數據&#xff08;輸入、標注) 損失函數 .cuda方式 代碼&#xff1a; import torch.optim import torchvision from torch import nn from torch.utils.data import DataLoader from torch.utils.tensorboard import SummaryWriter# 1. 準備數據集 t…

C++實現XOR加解器

#include <Windows.h> #include <iostream> #include <fstream> #include <string>// 加解密函數&#xff0c;使用XOR運算 void XORCrypt(char* data, int size, const std::string& key) {int keyLength key.length();for (int i 0; i < siz…

日志系統項目實現

日志系統的功能也就是將一條消息格式化后寫入到指定位置&#xff0c;這個指定位置一般是文件&#xff0c;顯示器&#xff0c;支持拓展到數據庫和服務器&#xff0c;后面我們就知道如何實現拓展的了&#xff0c;支持不同的寫入方式(同步異步)&#xff0c;同步:業務線程自己寫到文…

萬卡集群:字節搭建12288塊GPU的單一集群

文章目錄 論文Reference 論文 MegaScale: Scaling Large Language Model Training to More Than 10,000 GPUs 論文鏈接&#xff1a;https://arxiv.org/abs/2402.15627 從結構上講&#xff0c;網絡是基于Clos的“胖樹”結構。其中一個改進是在頂層交換機上把上行與下行鏈路分開&…

三、《任務列表案例》前端程序搭建和運行

本章概要 整合案例介紹和接口分析 案例功能預覽接口分析 前端工程導入 前端環境搭建導入前端程序 啟動測試 3.1 整合案例介紹和接口分析 3.1.1 案例功能預覽 3.1.2 接口分析 學習計劃分頁查詢 /* 需求說明查詢全部數據頁數據 請求urischedule/{pageSize}/{currentPage} 請…

stm32觸發硬件錯誤位置定位

1.背景 1. 項目中&#xff0c;調試過程或者測試中都會出現程序跑飛問題&#xff0c;這個時候問題特別難查找。 2. 觸發硬件錯誤往往是因為內存錯誤。這種問題特別難查找&#xff0c;尤其是產品到了測試階段&#xff0c;而這個異常復現又比較難的情況下&#xff0c;簡直頭疼。…

初學JavaScript總結

0 JavaScript html完成了架子&#xff0c;css做了美化&#xff0c;但是網頁是死的&#xff0c;需要給他注入靈魂&#xff0c;所以接下來需要學習JavaScript&#xff0c;這門語言會讓頁面能夠和用戶進行交互。JavaScript又稱為腳本語言&#xff0c;可以通過腳本實現用戶和頁面的…

每日shell腳本之打印99乘法表

每日shell腳本之打印99乘法表 #!/bin/bash for i in $(seq 1 9); dofor j in $(seq 1 9); doecho -n "$i * $j $(($i * $j)) "doneecho done

Programming Abstractions in C閱讀筆記:p306-p307

《Programming Abstractions in C》學習第75天&#xff0c;p306-p307總結&#xff0c;總計2頁。 一、技術總結 1.Quicksort algorithm(快速排序) 由法國計算機科學家C.A.R(Charles Antony Richard) Hoare&#xff08;東尼.霍爾&#xff09;在1959年開發(develop), 1961年發表…

Mac 制作可引導安裝器

Mac 使用U盤或移動固態硬盤制作可引導安裝器&#xff08;以 Monterey 為例&#xff09; 本教程參考 Apple 官網相關教程 創建可引導 Mac OS 安裝器 重新安裝 Mac OS 相關名詞解釋 磁盤分區會將其劃分為多個單獨的部分&#xff0c;稱為分區。分區也稱為容器&#xff0c;不同容器…

VR虛擬現實技術應用到豬抗原體檢測的好處

利用VR虛擬仿真技術開展豬瘟檢測實驗教學確保生豬產業健康發展 為了有效提高豬場豬瘟防控意識和檢測技術&#xff0c;避免生豬養殖業遭受豬瘟危害&#xff0c;基于VR虛擬仿真技術開展豬瘟檢測實驗教學數據能大大推動基層畜牧養殖業持續穩步發展保駕護航。 一、提高實驗效率 VR虛…

鯤鵬arm64架構下安裝KubeSphere

鯤鵬arm64架構下安裝KubeSphere 官方參考文檔: https://kubesphere.io/zh/docs/quick-start/minimal-kubesphere-on-k8s/ 在Kubernetes基礎上最小化安裝 KubeSphere 前提條件 官方參考文檔: https://kubesphere.io/zh/docs/installing-on-kubernetes/introduction/prerequi…