關於樹狀數組的區間修改和單點查詢
寫在前面
之前一直不知道樹狀數組可以支持區間修改,所以寫一篇博客記錄一下。
首先給個小栗子:
如下圖:
利用差分的思路,就得到下圖:
那麽如果我們要求將2~4的所有元素+2呢?我們就可以得到下圖:
可以發現,差分的第二項和第五項一個加了2,一個減了2,所以對於每次區間[l,r]操作,我們只需要在l和r+1的位置加、減操作值即可,證明也很簡單,首先操作區間內的數的差肯定不會變,所以區間內的一段相同,因為第一項增加了一個值k,所以他與前面一項的差就增加了k,最後一項增加了k,最後一項的後一項與最後一項的差就減小了k,所以最後變化的就只有l和r+1位置的數,單點查詢就只需要求前綴和即可。
--------------------- 本文來自 G21GLF 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/g21glf/article/details/82969676?utm_source=copy
關於樹狀數組的區間修改和單點查詢
相關推薦
關於樹狀陣列的區間修改和單點查詢
寫在前面 之前一直不知道樹狀陣列可以支援區間修改,所以寫一篇部落格記錄一下。 首先給個小栗子: 如下圖: 利用差分的思路,就得到下圖: 那麼如果我們要求將2~4的所有元素+2呢?我們就可以得到下圖: 可以發現,差分的第二項和第五項一個加了2,一個減了2
樹狀陣列(區間修改,單點查詢)
這裡介紹樹狀陣列+差分思想,算是對下面大神的補充吧。 何為差分現在我們有一個從小到大的數列a[] a{1,3,6,8,9}; 然後還有一個差分陣列b[] b{1,2,3,2,1} 相信某些小夥伴已經看
Matrix 二維樹狀陣列 區間修改+單點查詢
Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the i-th row and j-th column. Initially we have A[i,
二維樹狀陣列(區間修改,單點查詢)
好像不管是幾維都和一維原理差不多,多了一個維度也就多了一層迴圈而已(QAQ) #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath&g
關於樹狀數組的區間修改和單點查詢
地址 src 區間修改 r+ 寫在前面 mar article .net 操作 寫在前面 之前一直不知道樹狀數組可以支持區間修改,所以寫一篇博客記錄一下。 首先給個小栗子: 如下圖: 利用差分的思路,就得到下圖: 那麽如果我們要求將2~4的所有元素+2呢?我們就可以得到
【bzoj3779】重組病毒 LCT+樹上倍增+DFS序+樹狀數組區間修改區間查詢
父親 輸入 神題 ace 答案 printf 正常 rotate 輸出 題目描述 給出一棵n個節點的樹,每一個節點開始有一個互不相同的顏色,初始根節點為1。 定義一次感染為:將指定的一個節點到根的鏈上的所有節點染成一種新的顏色,代價為這條鏈上不同顏色的數目。 現有m次
樹鏈剖分套樹狀數組(區間修改)板子
c代碼 msu style ont 重要 pri ott src inline P3384 【模板】樹鏈剖分 題目描述 如題,已知一棵包含N個結點的樹(連通且無環),每個節點上包含一個數值,需要支持以下操作: 操作1: 格式: 1 x y z 表示將樹從x到y結點最短
【bzoj4540】[Hnoi2016]序列 單調棧+離線+掃描線+樹狀數組區間修改
sta 輸出 char algo .com legend 方法 tle leg 題目描述 給出一個序列,多次詢問一個區間的所有子區間最小值之和。 輸入 輸入文件的第一行包含兩個整數n和q,分別代表序列長度和詢問數。接下來一行,包含n個整數,以空格隔開,第i個整數為ai
poj3468區間加減查找——樹狀數組區間修改查詢
兩個 區間和 urn void pos sharp space scan 個數 題目:http://poj.org/problem?id=3468 增加一個更改量數組,施以差值用法則區間修改變為單位置修改; 利用公式可通過樹狀數組維護兩個數組:f與g而直接求出區間和。 代碼
【bzoj5173】[Jsoi2014]矩形並 掃描線+二維樹狀數組區間修改區間查詢
scan str div 現在 復雜 需要 truct 一行 include 題目描述 JYY有N個平面坐標系中的矩形。每一個矩形的底邊都平行於X軸,側邊平行於Y軸。第i個矩形的左下角坐標為(Xi,Yi),底邊長為Ai,側邊長為Bi。現在JYY打算從這N個矩形中,隨機選出
樹狀數組區間修改,區間更新:差分數組的運用
容易 div 前綴和 根據 www 數組 一個數 log 一個 樹狀數組最原始的作用就是求前綴和,可以實現單點修改和區間查詢。 但是假設現在有: 1.區間修改,單點查詢 2.區間修改,區間查詢 但是又不想敲線段樹怎麽辦? 就用樹狀數組嘍。 假設現在有一個原數組a
Color the ball (樹狀陣列,區間更新,單點查詢)
N個氣球排成一排,從左到右依次編號為1,2,3....N.每次給定2個整數a b(a <= b),lele便為騎上他的“小飛鴿"牌電動車從氣球a開始到氣球b依次給每個氣球塗一次顏色。但是N次以後lele已經忘記了第I個氣球已經塗過幾次顏色了,你能幫他算出每個氣球被塗過幾次顏色嗎? Inpu
樹狀數組的區間修改與單點查詢與區間查詢
pri 區間 stream 個數 普通 sca ace 一個數 n) 如何將普通樹狀數組升級 普通的單點修改單點查詢就不講了,從區間修改和單點查詢講起。 原來的值存在a[]裏面,多建立個數組c1[],註意:c1[i]=a[i]-a[i-1]。 那麽求a[
HDU - 3584 Cube (三維樹狀數組 + 區間改動 + 單點求值)
btn either -o mem 求值 popu -s onos column HDU - 3584 Cube Time Limit: 1000MS Memory Limit: 65536KB 64bit IO
一維數狀數組區間修改,查詢
int strong bit 操作 owb codevs ++ fin 正整數 模板題CODEVS-1082 給你N個數,有兩種操作: 1:給區間[a,b]的所有數增加X 2:詢問區間[a,b]的數的和。 第一行一個正整數n,接下來
【樹狀數組區間加+區間查詢模板】洛谷P3372
typedef 記錄 using main == str ios namespace arp 雖然說這道題線段樹很好做,但畢竟樹狀數組常數小又好寫,所以還是寫個模板吧。 區間加轉為前綴加 區間和轉為前綴和 我們討論一個1~k的區間加x對於一個前綴和val【i】的影響 對於所
樹狀數組區間更新
-i https 特征 以及 樹狀 com 分析 標題 好的 樹狀數組區間更新 在今天的文章開始之前,給大家提一個建議,由於線段樹和樹狀數組這兩個結構的分析有很多聯系,因此,建議沒有看前幾篇文章的朋友一定需要了解一下前面的內容。鏈接如下: 線段樹+RMQ問題
Permutation UVA - 11525(值域樹狀數組,樹狀數組區間第k大(離線),log方,log)
一次 跳過 += 數字 div ret num while printf Permutation UVA - 11525 看康托展開 題目給出的式子(n=s[1]*(k-1)!+s[2]*(k-2)!+...+s[k]*0!)非常像逆康托展開(將n個數的所有排列按字典序
樹狀陣列的區間修改和區間查詢模板
#include <iostream> using namespace std; #define lowbit(x) ((x) & (-(x))) long long arrC1[200010], arrC2[200010]; long long
BZOJ1513:樹套樹之線段樹套線段樹實現二維區間修改和最值查詢
name names algo getch oid min 投影 協調 pan 我們經常提及的二維線段樹有兩種寫法,一種是四分樹,一種是樹套樹,寫成四分樹的都是神仙。 樹套樹寫法還是比較好理解的,不過要是讓自己硬套的話可能很不容易套出來的 這裏的二維線段樹,外層線段樹是對方