樹狀數組——點修區查與區修點查

樹狀數組是一種代碼量小,維護區間的數據結構

他可以實現:

1.區間修改,單點查詢

2.單點修改,區間查詢

當然,二者不可兼得,大人全都要的話,請選擇線段樹

前置知識:

lowbit(x)操作:

獲取x二進制的最后一位1以及其后面的0所組成的數

比如x等于6時,其二進制為110,那么lowbit(6)就等于2,其二進制為10

這里有:

lowbit(x)=x&(-x)

樹狀數組的特性:

對于樹狀數組tr[N]而言

tr[x+lowbit(x)]是tr[x]的父親

對于區間[1,x]而言

其區間和等于tr[x]+\sum tr[x-lowbit(x))] (x>0)



操作:

設原數組為a[N],大小為n,樹狀數組為tr[N],

1.單點修改,區間查詢:

假設我們要對a[x]的權值進行修改,那么我們對tr[x]進行修改,然后不斷pushup他的父結點,也就是tr[x+lowbit(x)]就可以了,直到pushup到tr[n]

如果我們要對區間[l,r]進行查詢,我們只要求出區間[1,l-1],[1,r],然后利用前綴和就可以求出區間[l,r]的和了

實現代碼如下:

int lowbit(int x){return x & (-x);
}//單點修改
void pointAdd(int x,int k){for (int i = x; i <= n;i+=lowbit(i)){tr[i] += k;}
}//查詢區間[l,r]
int queryLine(int l,int r){int sum = 0;for (int i = r; i;i-=lowbit(i)){sum += tr[i];}for (int i = l - 1; i;i-=lowbit(i)){sum -= tr[i];}return sum;
}

2.區間修改,單點查詢

其實本質上還是利用樹狀數組單點修改的方便性

這里我們構造原數組的差分數組d,然后用樹狀數組來維護數組d

當我們需要對原數組的區間[l,r]進行加權值k的修改時,只需要對差分數組d[l]和d[r+1]進行單點修改就可以了

當我們需要對原數組的a[x]進行查詢時,只要求出d數組[1,x]的區間和就可以了

實現代碼如下:

//初始化差分數組以及樹狀數組
void init(){for (int i = 1; i <= n;i++){d[i] = a[i] - a[i - 1];for (int j = i; j <= n;j+=lowbit(j)){tr[j] += d[i];}}
}//區間修改
void change(int l,int r,int k){for (int i = r + 1; i<=n;i+=lowbit(i)){tr[i] -= k;}for (int i = l;i<=n;i+=lowbit(i)){tr[i] += k;}
}//單點查詢
int query(int x){int sum = 0;for (int i = x; i;i-=lowbit(i)){sum += tr[i];}return sum;
}

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

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

相關文章

如何安裝和配置Monit

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到網站。 關于 Monit Monit 是一個有用的程序&#xff0c;可以自動監控和管理服務器程序&#xff0c;以確保它們不僅保持在線&#xff0c;而且文…

Java與前端框架集成開發指南

Java與前端框架集成開發指南 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 引言 在當今互聯網應用開發中&#xff0c;Java作為一種強大的后端語言&#xff0…

程序人生 - (002)

作為一名程序員&#xff0c;在編程和軟件開發的過程中&#xff0c;通常會有一些深刻的感悟和體會。這些感悟不僅僅是關于技術的&#xff0c;也包括對工作的態度、職業的發展和人生的理解。 代碼即邏輯&#xff1a;編寫代碼不僅僅是使用編程語言&#xff0c;更重要的是用邏輯思維…

LDM論文解讀

論文名稱&#xff1a;High-Resolution Image Synthesis with Latent Diffusion Models 發表時間&#xff1a;CVPR2022 作者及組織&#xff1a;Robin Rombach, Andreas Blattmann, Dominik Lorenz,Patrick Esser和 Bjorn Ommer, 來自Ludwig Maximilian University of Munich &a…

獨一無二的設計模式——單例模式(Java實現)

1. 引言 親愛的讀者們&#xff0c;歡迎來到我們的設計模式專題&#xff0c;今天的講解的設計模式&#xff0c;還是單例模式哦&#xff01;上次講解的單例模式是基于Python實現&#xff08;獨一無二的設計模式——單例模式&#xff08;python實現&#xff09;&#xff09;的&am…

web全屏api,實現元素放大全屏,requestFullscreen,exitFullscreen

全屏api 主要方法 document.exitFullscreen(); 退出頁面全屏狀態&#xff0c;document是全局文檔對象 dom.requestFullscreen(); 使dom進入全屏狀態&#xff0c;異步&#xff0c;dom是一個dom元素 dom.onfullscreenchange&#xff08;&#xff09;; 全…

專題四:Spring源碼初始化環境與BeanFactory

上文我們通過new ClassPathXmlApplicationContext("applicationContext.xml");這段代碼看了下Spring是如何將Xml里面內容注入到Java對象中&#xff0c;并通過context.getBean("jmUser");方式獲得了一個對象實例&#xff0c;而避開使用new 來耦合。今天我們…

【TB作品】智能臺燈控制器,ATMEGA128單片機,Proteus仿真

題目 8 &#xff1a;智能臺燈控制器 基于單片機設計智能臺燈控制器&#xff0c;要求可以調節 LED 燈的亮度&#xff0c;實現定時開啟與關閉&#xff0c; 根據光照自動開啟與關閉功能。 具體要求如下&#xff1a; &#xff08;1&#xff09;通過 PWM 功能調節 LED 燈亮度&#x…

【本地調試】使用 Nginx 和 Hosts 文件實現本地開發調試請求轉發

可以按照以下 nginx 配置來設置&#xff0c;通過 nginx 和 host 將網頁的請求轉發到本地的后端服務器&#xff0c;以方便本地開發調試 一、nginx 配置 worker_processes 1;events {worker_connections 1024; }http {include mime.types;default_type application/js…

【Python】 數據分析中的常見統計量:中位數

那年夏天我和你躲在 這一大片寧靜的海 直到后來我們都還在 對這個世界充滿期待 今年冬天你已經不在 我的心空出了一塊 很高興遇見你 讓我終究明白 回憶比真實精彩 &#x1f3b5; 王心凌《那年夏天寧靜的海》 中位數&#xff08;Median&#xff09;是統計學…

深入淺出3D感知中的優化與基于學習的技術1(原創系列)

近期幾乎看了所有有關NERF技術論文&#xff0c;本身我研究的領域不在深度學習技術方向&#xff0c;是傳統的機器人控制和感知。所以總結了下這部分基于學習的感知技術&#xff0c;會寫一個新的系列教程講解這部分三維感知技術的發展到最新的技術細節&#xff0c;并支持自己最近…

娛樂圈發生震動,AI大模型技術已經取代了SNH48的小偶像?

自2023年以來&#xff0c;全球都被包裹在AI的驚天大潮之中&#xff0c;所有行業都在主動或被動地迎接改變。目前&#xff0c;各行業已經有大量公司正在把AI作為自身發展的最佳路徑。其中&#xff0c;娛樂行業作為最被人們熟知的行業也在面對AI的發展時&#xff0c;發生著巨大變…

解析Java中1000個常用類:Currency類,你學會了嗎?

在線工具站 推薦一個程序員在線工具站:程序員常用工具(http://cxytools.com),有時間戳、JSON格式化、文本對比、HASH生成、UUID生成等常用工具,效率加倍嘎嘎好用。程序員資料站 推薦一個程序員編程資料站:程序員的成長之路(http://cxyroad.com),收錄了一些列的技術教程…

解析connectionReset異常的原因與解決方案

解析connectionReset異常的原因與解決方案 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天我們將深入探討Java中connectionReset異常的原因及其解決方案。這…

遙遠星辰中的覺醒:超大質量黑洞的蘇醒與人類的未來

遙遠星辰中的覺醒&#xff1a;超大質量黑洞的蘇醒與人類的未來 在浩渺無垠的宇宙中&#xff0c;星辰的閃爍仿佛是時間的漣漪&#xff0c;穿越億萬年的距離&#xff0c;抵達我們的眼眸。而在這片星辰大海的深處&#xff0c;一個驚人的現象正在悄然上演——距離地球3.6億光年之遙…

Unity獲取剪切板內容粘貼板圖片文件文字

最近做了一個發送消息的unity項目&#xff0c;需要訪問剪切板里面的圖片文字文件等&#xff0c;翻遍了網上的東西&#xff0c;看了不是需要導入System.Windows.Forms&#xff08;關鍵導入了unity還不好用&#xff0c;只能用在純c#項目中&#xff09;&#xff0c;所以我看了下py…

GMSB文章九:微生物的相關關系組間波動

歡迎大家關注全網生信學習者系列&#xff1a; WX公zhong號&#xff1a;生信學習者Xiao hong書&#xff1a;生信學習者知hu&#xff1a;生信學習者CDSN&#xff1a;生信學習者2 介紹 計算配對微生物在組間的相關關系波動情況進而評估不同分組的微生物狀態。secom_linear 函數…

線性表與順序存儲結構(下)

前言 接上文&#xff08;線性表與順序存儲結構&#xff08;上&#xff09;&#xff09;。 這些順序存儲結構的方法在順序表上下卷中已經提到過&#xff0c;但是有些許不同&#xff0c;可以為理解順序表提供更豐富的視角。&#xff08;不過最主要的區別在于順序表上下卷中的順…

機器人關節 viscous friction與結構阻尼

Viscous Friction&#xff08;粘性摩擦&#xff09; 定義&#xff1a;Viscous friction&#xff0c;也被稱為粘性摩擦或粘滯摩擦&#xff0c;是機器人關節在運動過程中由于接觸面之間的相互作用而產生的摩擦力。這種摩擦力與關節的運動速度有關&#xff0c;通常表現為速度越大&…

HarmonyOS開發實戰:分布式文件系統-hmdfs

分布式文件系統提供跨設備的文件訪問能力&#xff0c;適用于如下場景&#xff1a; 兩臺設備組網&#xff0c;A 設備可以無感讀取和修改 B 設備的文件。 邊緣服務器可以自動同步組網中多個嵌入式設備中的文件數據。 hmdfs 在分布式軟總線動態組網的基礎上&#xff0c;為網絡上…