線段樹單點查詢

2021-10-10 03:12:06 字數 929 閱讀 2901

poj2828

題目大意:排隊,每個人可以有乙個可插入的序號,可以直接排到那個位置去;

最重要的點就是在有序號i的人的前面,1~i-1的序號已經出現了;

逆推,因為在最後面的人是不受約束的,不會因為還有人排隊進來而改變自己在佇列當中的序號。又因為在他的前面是有i個人的序號是比他小的,那麼他得留出來i個位置給那些人占領。

#include

using

namespace std;

const

int max_n=

200020

;int data[max_n<<2]

;int ans[max_n]

;void

init

(int l,

int r,

int p)

init

(l,(l + r)/2

, p *2+

1);init

((l + r)/2

, r, p *2+

2);}

void

updata

(int t,

int x,

int l,

int r,

int p)

if(data[p *2+

1]> t)

else

data[p]

= data[p *2+

1]+ data[p *2+

2];}

int a[max_n]

, b[max_n]

;int

main()

for(

int i = n; i >=

1; i--

)for

(int i =

0; i < n; i++

) cout<}}

線段樹 建樹 單點修改 單點 區間查詢

線段樹 sgement tree 是一種分治思想的二叉樹結構,用於在區間上進行資訊統計。與按照二進位制位進行區間劃分的樹狀陣列相比,線段樹是一種更加通用的結構 1.線段樹的每個節點都代表乙個區間。2.線段樹具有唯一的根節點,代表的區間是整個統計範圍,如 1,n 3.線段樹的每個葉節點都代表乙個長度為...

線段樹區間修改和查詢和單點查詢(線段樹模板1)

如題,已知乙個數列,你需要進行下面兩種操作 將某區間每乙個數加上 kk。求出某區間每乙個數的和。第一行包含兩個整數 n,mn,m,分別表示該數列數字的個數和操作的總個數。第二行包含 nn 個用空格分隔的整數,其中第 ii 個數字表示數列第 ii 項的初始值。接下來 mm 行每行包含 33 或 44 ...

單點更新,區間查詢線段樹

線段樹的空間複雜度是4n include include include using namespace std const int maxn 100005 const int inf 0x3f3f3f3f int n,a maxn struct node 結點 tree maxn 4 樹結點儲存陣...