數據結構·數狀數組(BIT)

樹狀數組(Binary Index Tree)

求x的最低位1的函數lowbit(x)

  • 假設x的二進制表示為x= ...10000,其中1是x的最低位1,前面的位數我們不關心。則-x=.....01111+1=10000(取反+1)。
  • x&-x=...10000&..01111+1=000000...10000,因此我們可以得到x的最低位1所對應的那個數
int lowbit(int pos) {return pos & -pos;
}

樹狀數組的理解

  • t[pos]的含義:t[pos]=∑{?x∣x+lowbit(x)=pos}t[x]+a[pos]t[pos]=\sum_{\{\forall x \mid x+lowbit(x)=pos\}}{t[x]}+a[pos]t[pos]={?xx+lowbit(x)=pos}?t[x]+a[pos]
  • 例如:t[8=1000]=t[4=0100]+t[6=0110]+t[7=0111]+a[8]t[8=1000]=t[4=0100]+t[6=0110]+t[7=0111]+a[8]t[8=1000]=t[4=0100]+t[6=0110]+t[7=0111]+a[8],其中a[8]a[8]a[8]是原始數組第8個數。
  • 注意:不能通過pos?lowbit(pos)pos-lowbit(pos)pos?lowbit(pos)得到x。
    在這里插入圖片描述

建樹

  • 由于不能通過pos?lowbit(pos)pos-lowbit(pos)pos?lowbit(pos)反過來確定x,所以我們要從x開始累加lowbit(x)向上更新,這一步相當于前綴和的累積。
void build(int pos,int val) {while (pos<=n) {t[pos] += val;pos += lowbit(pos);}
}

查詢

  • 由于t[pos]的含義不能很好確定,因此只能采取笨方法,不斷遞減lowbit(pos)獲得a[1] to a[pos]的前綴和,然后再來求某一區間的和。
int query(int pos) {int sum = 0;while (pos >0) {sum += t[pos];pos -= lowbit(pos);}return sum;
}

適用問題

前綴和數組支持O(1)O(1)O(1)的區間和查詢,但是不支持動態的區間修改

差分數組支持O(1)O(1)O(1)的區間修改,但是不支持動態的單點求值

樹狀數組相當于是一個折中,區間修改和查詢的復雜度為O(logn)O(logn)O(logn)

例題:

  • P3374 【模板】樹狀數組 1:動態區間修改和區間求和。樹狀數組作為前綴和
  • P3368 【模板】樹狀數組 2:動態區間修改和輸出單一數組值。樹狀數組作為差分數組
  • P1908 逆序對:暴力解法的優化。

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

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

相關文章

uniapp video視頻全屏播放后退出,頁面字體變大,樣式混亂問題

uniapp官方的說法是因為頁面使用rpx&#xff0c;但是全屏和退出全屏自動計算屏幕尺寸不支持rpx&#xff0c;建議使用px。但是因為uniapp端的開發都是使用rpx作為屏幕尺寸計算參數&#xff0c;不可能因為video全屏播放功能就整個全部修改&#xff0c;工作量大&#xff0c;耗時耗…

重復頻率較高的廣告為何一直在被使用?

在日常生活中&#xff0c;重復評率較高的洗腦廣告我們時常能夠碰到。廣告的本質是信息傳遞&#xff0c;而重復頻率較高的廣告往往可以通過洗腦式的傳播方式來提升傳播效率。下面就讓我們一同來了解下&#xff0c;為何這類廣告一直受到企業的青睞。一、語義凝練高頻率廣告的內容…

內容管理系統指南:企業內容運營的核心引擎

內容管理看似簡單&#xff0c;實際上隨著內容量的激增&#xff0c;管理難度也逐步提升。尤其是在面對大量頁面、圖文、視頻資料等數字內容時&#xff0c;沒有專業工具的支持&#xff0c;效率與準確性都會受到挑戰。此時&#xff0c;內容管理系統&#xff08;CMS&#xff09;應運…

文獻查找任務及其方法

1. 必備網站&#xff1a; 谷歌學術 Web of Science Engineering Village CNKI翻譯助手 科研通 2. 任務 學術上的一個調研&#xff0c;自動駕駛 3d 目標檢測 方向的近7年的方法&#xff0c;模態&#xff08;相機/雷達/相機雷達 等&#xff09;&#xff0c;及其使用的數據集&a…

鴻蒙的NDK開發初級入門篇

初級必備的知識&#xff1a; NDK開發在什么時候用&#xff1f; 答&#xff1a;&#xff1a;NDK 開發在幫助應用提升性能的情況下使用&#xff0c;比如游戲開發&#xff0c;和硬件交互的場景中。 還有一個公司已經有標準的C或C庫&#xff0c;不想在開發ArkTS的代碼前提下。 開發…

Unity發布Windows平臺后通過Advanced Installer制作安裝包

Unity發布Windows平臺后是一堆庫資源&#xff0c;以及一個可執行的exe文件&#xff0c;并不是一個安裝包&#xff0c;如果需要制作成安裝包&#xff0c;需要再進一步打包&#xff0c;本篇文章介紹一個Advanced Installer的軟件&#xff0c;專門用來制作Windows平臺的安裝包的。…

代數基本定理

代數基本定理 多項式 f(z)anznan?1zn?1?a1za0f(z) a_n z^n a_{n-1} z^{n-1} \cdots a_1 z a_0f(z)an?znan?1?zn?1?a1?za0?&#xff08;其中 n>1n > 1n>1 且 an,a0≠0a_n,a_0 \neq 0an?,a0?0&#xff09;在復數域內有根。 約定 以 ttt 為參數的閉曲…

springboot快速集成對接本地Ollama里的Deepseek-R1

書接上回&#xff0c;我們在本地安裝了一個Ollama&#xff0c;然后下載了一個deepseek-r1:7b&#xff0c;傳送門 本次目標&#xff1a;使用springboot對接ollama&#xff0c;完成簡單api對接 1.創建一個項目&#xff0c;選擇JDK17&#xff0c;Spring Boot版本3.5.3&#xff0c…

Docker部署私有倉庫

環境信息 centos7&#xff1a;docker26.1.4 IP&#xff1a;192.168.12.134 部署harbor wget https://github.com/goharbor/harbor/releases/download/v2.13.1/harbor-offline-installer-v2.13.1.tgz curl -L "https://github.com/docker/compose/releases/download/1.29.2…

張藝興探班RED女團一周年舞臺,見證21歲的夢想落地生根

從青澀的男團偶像&#xff0c;到如今獨當一面的音樂制作人、公司老板&#xff0c;張藝興的每一步都踏得堅定有力&#xff0c;他的故事充滿了熱血與夢想的色彩。而最近&#xff0c;他探班RED女團一周年舞臺現場的舉動&#xff0c;又一次成為粉絲和大眾熱議的焦點&#xff0c;也讓…

網絡編程 JAVA

一.網絡編程1. 什么是網絡編程&#xff1f;網絡編程是指利用計算機網絡實現程序之間通信的一種編程方式。在網絡編程中&#xff0c;程序需要通過網絡協議&#xff08;如 TCP/IP&#xff09;來進行通信&#xff0c;以實現不同計算機之間的數據傳輸和共享。2. 三個基本要素①IP …

UE5中的cesium

官方Fab地址&#xff08;https://www.fab.com/zh-cn/&#xff09;&#xff0c;每月可下載免費素材 在UE5中添加插件cesium for unreal&#xff0c; 知識點一&#xff1a;服務器部署.b3dm地形數據 通過在線鏈接訪問數據目錄tileset.json&#xff0c;在cesium for unreal添加空白…

持續優化小程序排名,穩定獲取搜索流量

一、建立動態關鍵詞管理機制周期性關鍵詞迭代每月通過平臺搜索分析工具&#xff08;如微信小程序后臺&#xff09;抓取用戶搜索詞趨勢&#xff0c;淘汰搜索量下降的關鍵詞&#xff0c;補充行業熱點詞與長尾需求詞。按 “核心詞 季節 / 場景詞” 動態調整名稱與簡介&#xff08…

MyBatis 進階:連接池、動態 SQL 與多表關聯查詢

MyBatis 作為一款靈活的持久層框架&#xff0c;除了基礎的 CRUD 操作&#xff0c;還提供了連接池管理、動態 SQL 以及多表關聯查詢等高級特性。本文將從連接池原理出發&#xff0c;深入講解動態 SQL 的常用標簽&#xff0c;并通過實例演示一對多、多對多等復雜關聯查詢的實現&a…

反射型跨站點腳本(XSS)漏洞中網絡安全防火墻(WAF)被繞過進行內容植入與遠程劫持機制分析

在一次安全測試中&#xff0c;我發現目標站點在錯誤處理頁面對用戶輸入的查詢參數名未做任何轉義&#xff0c;當參數名中包含 <script> 標簽時&#xff0c;頁面會原樣渲染并執行其中的 JavaScript。本文將從實戰角度&#xff0c;詳細講解如何定位該反射型 XSS 漏洞、通過…

RAG實戰指南 Day 15:多語言與領域特定嵌入技術

【RAG實戰指南 Day 15】多語言與領域特定嵌入技術 引言 歡迎來到"RAG實戰指南"系列的第15天&#xff01;今天我們將深入探討多語言與領域特定嵌入技術——這是構建全球化、專業化RAG系統的關鍵技術。在現實業務場景中&#xff0c;我們經常需要處理多種語言的文檔&a…

無鉛PCB和無鹵pcb有什么區別?

在電子制造領域&#xff0c;環保法規的升級催生了多種特殊工藝的PCB產品。其中&#xff0c;無鉛PCB與無鹵PCB作為兩大主流方向&#xff0c;雖同屬綠色制造范疇&#xff0c;卻在技術路徑與應用場景上存在本質差異。環保指向的根本區別無鉛PCB的核心在于焊接材料的革新。傳統PCB采…

基于51單片機的貪吃蛇游戲Protues仿真設計

目錄 1 系統設計目的 2 系統實現功能 3 系統硬件設計 3.1系統設計框圖 3.2 液晶顯示模塊LCD12864 3.3 按鍵輸入模塊 3.4 時鐘電路和復位電路 4 系統軟件設計 4.1系統軟件流程 4.2 游戲引擎模塊程序設計 4.3 顯示模塊程序設計 4.4 輸入處理模塊程序設計 5 系統仿真…

HTML+CSS

一、HTML相關內容- <img> 標簽&#xff1a;- 用于在網頁中嵌入圖像&#xff0c; src 屬性指定圖像的路徑&#xff0c;可以是絕對路徑&#xff08;如 D:\Git\java115_java116\課堂代碼\前端代碼\pic\cat.jpg &#xff09;、相對路徑&#xff08;如 ./pic/cat.jpg &#x…

基于 Gitlab、Jenkins與Jenkins分布式、SonarQube 、Nexus 的 CiCd 全流程打造

前言 在當今數字化飛速發展的時代&#xff0c;軟件開發與交付的效率和質量成為了企業競爭的關鍵要素。為了滿足市場對軟件快速迭代和高質量交付的需求&#xff0c;越來越多的企業開始探索和實踐持續集成與持續交付&#xff08;CI/CD&#xff09;的開發模式。而 GitLab、Jenkin…