1. 程式人生 > >樹狀陣列---差分方法

樹狀陣列---差分方法

               來介紹一下差分----(這個真的好用,今天用了這個樹狀陣列妙解)

設陣列a[]={1,6,8,5,10},那麼差分陣列b[]={1,5,2,-3,5}

也就是說b[i]=a[i]-a[i-1];(a[0]=0;),那麼a[i]=b[1]+....+b[i];(這個很好證的)。

假如區間[2,4]都加上2的話

a陣列變為a[]={1,8,10,7,10},b陣列變為b={1,7,2,-3,3};

發現了沒有,b陣列只有b[2]和b[5]變了,因為區間[2,4]是同時加上2的,所以在區間內b[i]-b[i-1]是不變的.

所以對區間[x,y]進行修改,只用修改b[x]與b[y+1]:

b[x]=b[x]+k;b[y+1]=b[y+1]-k;

相關推薦

陣列---方法

               來介紹一下差分----(這個真的好用,今天用了這個樹狀陣列妙解) 設陣列a[]={1,6,8,5,10},那麼差分陣列b[]={1,5,2,-3,5} 也就是說b[i]=a[i]-a[i-1];(a[0]=0;),那麼a[i]=b[1]+

洛谷P3368 陣列2 模板題 陣列+

戳我! 正解:樹狀陣列+差分 解題報告: 不得不說靈巧真滴是越來越弱了...連模板題都要放上來了QAQ 因為今天考試的T3正解要用到樹狀陣列這才警覺樹狀陣列掌握得太太太太差了...之前一直靠線段樹續著一條狗命然後又感覺挺複雜的就一直沒了解也懶得去理解QAQ 然後趕緊就滾去把兩個模板給做了 1就懶

POJ2155/LNSYOJ113 Matrix【二維陣列+】【做題報告】

這道題是一個二維樹狀陣列,思路十分神奇,其實還是挺水的 題目描述 給定一個N∗NN∗N的矩陣AA,其中矩陣中的元素只有0或者1,其中A[i,j]A[i,j]表示矩陣的第i行和第j列(1≤i,j≤N)(1≤i,j≤N),初始矩陣元素都是0。在矩陣上進行TT次操作,操作有以下兩種: (1)格式為C x1 y

Codeforces 341D Iahub and Xors (二維陣列 推薦)

D. Iahub and Xors time limit per test 1 second memory limit per test 256 megabytes Iahub does not like background stories, so he'll tell you e

BZOJ P1103 「POI2007」大都市meg【dfs序】【陣列+

#include <queue> #include <cmath> #include <cstdio> #include <cstring> #include <iostream> #include &

DIV2:Vasya and a Treetime 陣列+

題目:E.Vasya and a Treetime time limit per test2 second smemory limit per test256 megabytes input:inputstandard output:outputstandard

BZOJ_P1935 [Shoi2007]Tree 園丁的煩惱(離散化+陣列+思想)

Time Limit: 15 Sec Memory Limit: 357 MB Submit: 808 Solved: 363 [Submit][Status][Discuss] Description 很久很久以前,在遙遠的大陸上有一個美麗的國

hdu-1556-陣列-陣列

這題就是N個氣球每次對[a,b]區間的氣球塗色,每次詢問第i個氣球被塗了多少次色。 顯然樸素的樹狀陣列實現單點修改+區間求和 對於這題區間修改+單點查詢,思想延續樹狀陣列。加上差分陣列的思想很容易知道我們只需要用樹狀陣列維護一個差分陣列,每次修改區間[a,b],我們只

【模板】陣列

題目描述 如題,已知一個數列,你需要進行下面兩種操作: 1.將某區間每一個數數加上x 2.求出某一個數的和 輸入輸出格式 輸入格式: 第一行包含兩個整數N、M,分別表示該數列數字的個數和操作的總個數。 第二行包含N個用空格分隔的整數,其中第i個數字表示數列第i項的初始值

HDU——1556 【陣列&&陣列】Color the ball

  N個氣球排成一排,從左到右依次編號為1,2,3....N.每次給定2個整數a b(a <= b),lele便為騎上他的“小飛鴿"牌電動車從氣球a開始到氣球b依次給每個氣球塗一次顏色。但是N次以後lele已經忘記了第I個氣球已經塗過幾次顏色了,你能幫他算出每個氣球被塗過幾次顏色

藍書(演算法競賽進階指南)刷題記錄——POJ3468 A Simple Problem with Intergers(陣列維護

題目:poj3468. 題目大意:給定一個序列a,要求支援: 1.格式C a b c,表示將[a,b]的權值都加上c. 2.格式Q a b,表示查詢[a,b]的權值和. 線段樹裸題(我像個傻子一樣寫了個LCT做了一遍),可是我們這裡不用線段樹,我們討論樹狀陣列的解法. 我們已

cf 1076e 樹上+陣列+離線

http://codeforces.com/contest/1076/problem/E 參考部落格:http://www.cnblogs.com/AKMer/p/9950332.html 題意: 根節點為1 樹,m次操作,每次給定v,d,x,將v的兒子(包含其本身)與它距離<=d的權值加上x

luogu3250 網路 (整體二分+樹上+陣列)

首先整體二分,問題變成是否存在經過一個點的滿足條件的路徑 那麼我對於每個路徑(a,b,lca),在樹狀陣列的dfn[a]++,dfn[b]++,dfn[lca]--,dfn[fa[lca]--] 然後直接查那個點的子樹和就行了 1 #include<bits/stdc++.h>

BZOJ4999 This Problem Is Too Simple!(樹上+dfs序+陣列

  對每個權值分別考慮。則只有單點加路徑求和的操作。樹上差分轉化為求到根的路徑和,子樹加即可。再差分後bit即可。注意樹上差分中根的父親是0,已經忘了是第幾次因為這個掛了。 #include<iostream> #include<cstdio> #include<cma

神奇的法(內附陣列的一點擴充套件)

差分法是我們所用的一個強力的武器! 有這把武器你就可以統治世界。。。 一個大佬曾經講過,一但碰到區間修改的題,就要優先考慮差分。 目錄 普通差分法 差分套差分(二階差分) 高階差分 樹上差分(點的意義與邊的意義) 例題 普通差分法

陣列的區間加法(

應用差分原理,實現樹狀陣列區間加法 差分:a區間[1, 2, 3, 4, 5],則差分割槽間為[1, 1, 1, 1, 1]即bn = an - an-1,an = b1 +…+ bn 如果對區間[2, 4]都加上2,則a[1, 5, 6, 7, 5], 差分割槽間[1, 4, 1,

【BZOJ4538】網路(HNOI2016)-整體二分+樹上+陣列

測試地址:網路 做法: 本題需要用到整體二分+樹上差分+樹狀陣列。 各位大佬想的都是用一些樹鏈剖分+線段樹套堆這種詭異操作,O(mlog⁡3n)O(m\log^3n)O(mlog3n)卡進去的,然而像我這種常數爆大選手根本不敢寫…於是發現還有222個log⁡\l

2018.09.26【TJOI2017】【BZOJ4888】【洛谷P3760】異或和(陣列)(

洛谷傳送門 解析: 額,TJOITJOITJOI連續兩年考了位運算。。。 我還能說什麼。。。 PS:zxyoiPS:zxyoiPS:zxyoi不是天津oieroieroier。 思路: 一般位運算都

陣列

目錄 樹狀陣列的引入 lowbit的含義 樹狀陣列的字首和儲存方式 單點修改 區間查詢 初始化 模板例題——樹狀陣列基本操作 差分——區間修改 備註 @(樹狀陣列演算法詳解·目錄) 樹狀陣列的引入 相信讀者一定知道什麼是字首和,形如一串數\(a1,a2...,

陣列---區間更新(陣列實現)

/* * @Author: Achan * @Date: 2018-10-28 12:55:01 * @Last Modified by: Achan * @Last Modified time: 2018-10-28 19:59:13 */ #incl