分塊

分塊

分塊是將線段樹的懶標記方法一般化,可證明通常情況下以 n \sqrt n n ?分塊是最優解。

分塊思想核心: 整塊打包維護 碎塊逐個枚舉

int len,num;//len:每塊長度,num:分塊數量
int begin[],end[],pos[],sum[],add[];//begin,end:每塊的始末下標 pos:每個下標所屬塊 sum:每塊區間和 add:整塊增量標記
void init(){len=sqrt(n);num=n/len;if(n%len) num++;//處理尾部有碎塊情形for(int i=1;i<=num;i++){//獲取第i塊的首尾下標begin[i]=(i-1)*len+1;end[i]=i*len;}end[num]=n;//更新最后一碎塊尾下標for(int i=1;i<=n;i++) pos[i]=(i-1)/len+1;//獲取第i個下標所屬的塊for(int i=1;i<=num;i++)for(int j=begin[i];j<=end[i];j++)sum[i]+=a[j];//獲取每塊區間和
}

區間修改

以在 [ l , r ] [l,r] [l,r]元素加d為例

extern int l,r,d,a[];
void update(){int beg=pos[l],ed=pos[r];//獲取l和r所屬的塊if(beg==ed){//l,r在相同塊中for(int i=l;i<=r;i++) a[i]+=d;sum[p]+=(r-l+1)*d;//更新該塊區間之和}else{//l,r中間跨越了整塊for(int i=l;i<=end[beg];i++) a[i]+=d;//將l所屬的塊處理完sum[beg]+=(end[beg]-l+1)*d;for(int i=beg+1;i<ed;i++) add[i]+=d;//處理中間的整塊for(int i=begin[ed];i<=r;i++) a[i]+=d;sum[ed]+=(r-begin[ed]+1)*d;}
}

總結:涉及到更新碎片,只在原數組a和塊區間和數組sum上更新,不更新add整塊增量標記

區間查詢

extern int l,r,a[];
int query(){int beg=pos[l],ed=pos[r];int ans=0;if(beg==ed){//l,r在相同塊中for(int i=l;i<=r;i++) ans+=a[i];ans+=add[p]*(r-l+1);//此塊可能被整體修改過}else{//l,r不在相同塊中for(int i=l;i<=end[l];i++) ans+=a[i];ans+=add[beg]*(end[l]-l+1);for(int i=beg+1;i<ed;i++) ans+=sum[i]+add[i]*(end[i]-begin[i]+1);//不能寫成add[i]*len,因為無法確定r是否在最后一個碎塊上for(int i=begin[ed];i<=r;i++) ans+=a[i];ans+=add[ed]*(r-begin[ed]+1);}return ans;
}

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

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

相關文章

linux下安裝cutecom串口助手;centos安裝cutecom串口助手;rpm安裝包安裝cutecom串口助手

在支持apt-get的系統下安裝 在終端命令行中輸入&#xff1a; sudo apt-get install cutecom 安裝好后輸入 sudo cutecom 就可以了 關于如何使用&#xff0c;可以看這個https://www.cnblogs.com/xingboy/p/14388610.html 如果你的電腦不支持apt-get。 那我們就通過安裝包…

‘wget‘ 不是內部或外部命令,也不是可運行的程序

在Windows環境下創建了虛擬環境并安裝了wget包&#xff0c;但在使用該命令的時候仍然報錯&#xff0c;‘wget’ 不是內部或外部命令,也不是可運行的程序 解決方案&#xff1a; 去官網下載對應位數的.exe文件&#xff0c;將其放在C:\Windows\System32目錄下即可, 別下錯版本&a…

寶塔面板部署Flask項目教程(最新版)

本教程適用于最新版的寶塔&#xff01;&#xff01;&#xff01; 本教程適用于最新版的寶塔&#xff01;&#xff01;&#xff01; 本教程適用于最新版的寶塔&#xff01;&#xff01;&#xff01; 1 準備 1.1 依賴文件 在你的項目根目錄下生成一個依賴文件&#xff0c;執行…

美業收銀系統怎么選?哪些功能實用?美業門店管理系統|拓客系統

選擇美業會員系統時&#xff0c;你可以考慮以下幾個方面的功能來確定哪些對你最實用&#xff1a; 1.會員管理&#xff1a; 系統應該能夠輕松管理會員資料、積分、消費記錄等信息&#xff0c;以便更好地了解客戶需求并提供個性化服務。 2.促銷與營銷工具&#xff1a; 包括發…

Perl中追蹤文件脈動:文件系統事件通知機制全解析

&#x1f4e1; Perl中追蹤文件脈動&#xff1a;文件系統事件通知機制全解析 在Perl編程中&#xff0c;文件系統事件通知機制允許程序響應文件或目錄的變化&#xff0c;例如文件的創建、刪除、修改等。這種機制對于實現如文件監控、數據同步、自動化任務等應用至關重要。本文將…

電商開通云賬戶分賬系統實現功能場景

什么是虛擬銀行賬戶: 銀行虛擬戶也稱為銀行虛擬公戶&#xff0c;是指企業或機構在銀行開設的一種特殊類型的銀行賬戶。它與普通銀行賬戶不同&#xff0c;虛擬公戶通常不涉及實際的資金流動&#xff0c;而主要用于管理和監控資金流向&#xff0c;以及實現特定的業務和財務目標。…

vue3項目安裝和使用element-plus

第一步&#xff1a;安裝 npm install element-plus --save 第二步&#xff1a;在main.js文件夾上引入 import { createApp } from vue import ./style.css import ElementPlus from element-plus import element-plus/dist/index.css import App from ./App.vueconst app c…

3D云渲染工具對決:Maya與Blender的性能和功能深度比較

3D建模和動畫制作已成為數字領域不可或缺的一環&#xff0c;無論是在影視特效的震撼場面&#xff0c;還是在游戲角色的生動表現&#xff0c;3D技術都扮演著至關重要的角色。而在這一領域&#xff0c;Maya和Blender這兩款軟件&#xff0c;以其強大的功能和廣泛的應用&#xff0c…

【JavaEE】進程

目錄 一.馮諾依曼體系結構 二.CPU的核心概念 核心數 頻率&#xff08;Clock Speed 或時鐘頻率&#xff09; 如何選擇合適的CPU 三.指令的執行 1.什么是指令 1.取指令 2.解析指令 3.執行指令 4.訪問內存&#xff08;Memory&#xff09;: 5.寫回結果&#xff08;Write…

視頻解碼故障案例兩則

案例1 綠邊 故障分析&#xff1a; 這個能明顯看到視頻上方出現綠色半透明邊帶。這說明Y數據正常。UV數據不正常。 它顯然與視頻幀的垂直分辨率設置有關。 UV數據和Y數據是連續放置的&#xff0c;如果上方出現彩色數據失調&#xff0c;說明這部分數據實際仍然是Y數據。也就是…

為什么我在go語言里從前端接收到的參數是數字28546.123456,但是我不能使用float32只能使用float64呢?

在 Go 語言中&#xff0c;當你從前端&#xff08;例如通過 HTTP 請求&#xff09;接收數據時&#xff0c;這些數據通常以字符串的形式到達后端。然后&#xff0c;后端需要將這些字符串解析或轉換為適當的類型&#xff0c;比如 float32 或 float64。 然而&#xff0c;如果你發現…

JAVASE進階day08(Map雙列集合)

HashMap 1.HashMap基本使用 package com.lu.day08.map;import java.util.HashMap; import java.util.Map; import java.util.Set;public class MapDome {public static void main(String[] args) {HashMap<String , String> map new HashMap<>();//添加后者修改-…

H264視頻編碼中Annex B 格式介紹

Annex B 格式是 H.264 (也稱為 AVC) 視頻編碼標準中的一種數據表示格式&#xff0c;用于將視頻數據從編碼器傳輸到解碼器。它主要用于流媒體傳輸和文件存儲。 文章目錄 Annex B 格式的定義Annex B 格式的主要特點Annex B 與其他格式的對比Annex B 格式示例將 H.264 數據從 MP4…

查詢(q_proj)、鍵(k_proj)和值(v_proj)投影具體含義

查詢(q_proj)、鍵(k_proj)和值(v_proj)投影&#xff0c;這些投影是自注意力機制的核心組件&#xff0c;特別是在Transformer架構中。 讓我們通過一個簡化的例子來說明&#xff1a; import numpy as np# 假設輸入維度是4&#xff0c;注意力頭數是2 input_dim 4 num_heads 2 …

每天一道Java面試題系列之--Spring如何解決循環依賴問題

面試題&#xff1a;Spring如何解決循環依賴問題&#xff1f; 問題背景&#xff1a; 在Spring框架中&#xff0c;循環依賴通常發生在單例&#xff08;Singleton&#xff09;作用域的bean之間。當兩個或多個bean在它們的構造函數中相互引用時&#xff0c;Spring容器在創建這些b…

電腦32位和62位是什么意思

在現代計算機世界中&#xff0c;32位和64位是兩個常見的術語&#xff0c;但許多用戶可能不太清楚它們的確切含義以及它們之間的區別。本文將詳細介紹32位和64位計算機的基本概念、如何查看您的計算機是32位還是64位&#xff0c;以及它們對用戶的實際影響。 32位與64位的基本概…

算法之工程化內容(1)—— Linux常用命令

目錄 1. cd 命令 2. pwd 查看當前工作目錄路徑 3. SSH遠程登錄 4. ln -s 軟鏈相關 5. mkdir 新建空目錄 6. cp 復制 7. chown 權限改寫 8. 進程相關&#xff08;nohup/ ps/ kill&#xff09; 9. tar -czvf/ tar -xzvf&#xff0c;zip/ unzip解壓縮文件 10. df/ du/ free 11. hi…

MySQL篇七:復合查詢

文章目錄 前言1. 基本查詢回顧2. 多表查詢3. 自連接4. 子查詢4.1 單行子查詢4.2 多行子查詢4.3 多列子查詢4.4 在from子句中使用子查詢4.5 合并查詢4.5.1 union4.5.2 union all 前言 前面我們講解的mysql表的查詢都是對一張表進行查詢&#xff0c;在實際開發中這遠遠不夠。 1.…

【高中數學/指數函數】比較a=0.6^0.9 b=0.6^1.5 c=1.5^0.6的大小

【問題】 比較a0.6^0.9 b0.6^1.5 c1.5^0.6的大小 【解答】 指數函數y0.6^x是減函數&#xff0c;因為0.9<1.5,所以0.6^0.9>0.6^1.5,即a>b; 指數函數y1.5^x是增函數&#xff0c;1.5^0.6>1.5^01>0.6^0.9,即c>a; 綜上&#xff0c;得出c>a>b的結論。 …

【運維】docker批量刪除臨時鏡像(兩種方式)

docker批量刪除Tag<none>的臨時鏡像 在開發的時候&#xff0c;需要經常發布開發包&#xff0c;在使用docker build構建鏡像的時候&#xff0c;同一個版本經常會使用相同tag&#xff0c;頻繁打包一段時間后&#xff0c;本地會出現很多Tag<none>的臨時鏡像&#xff…