線段樹用法歸納

2021-07-10 23:54:35 字數 1204 閱讀 8495

基本的建立線段樹和查詢一段區間內最小值與最大值。

方法一:

#include#include#includeusing namespace std;

struct sto

;int a[1000300];

sto m[8000300];

//構建線段樹,目的:得到m陣列.

void build(int node, int b, int e)

else

else

}}//找出區間 [i, j] 上的最小值的索引

int query(int node, int b, int e, int i, int j)

int query2(int p,int b,int e,int l,int r)

;tree tr[4000300];

int max(int a, int b)

int min(int a, int b)

void build(int l, int r, int rt)

int mid = (l + r) >> 1;

build(l, mid, rt << 1);

build(mid + 1, r, rt << 1 | 1);

tr[rt].maxx = max(tr[rt << 1].maxx, tr[rt << 1 | 1].maxx);

tr[rt].minn = min(tr[rt << 1].minn, tr[rt << 1 | 1].minn);

}int resmax = -99999999, resmin = 99999999;

void quemax(int l, int r, int rt)

}void quemin(int l, int r, int rt)

int mid = (tr[rt].left + tr[rt].right) >> 1;

if (mid >= r)

quemin(l, r, rt << 1);

else

if (mid + 1 <= l)

quemin(l, r, rt << 1 | 1);

else }

int main()

for (int i = 1; i + k <= n + 1; i++)

//system("pause");

}

未完待續。。。

線段樹 P4588 線段樹用法

簡單來說就是使用線段樹來儲存操作步驟,因為如果直接計算的話long long會溢位,所以建立乙個 1,q 的線段樹,使用線段樹的葉子節點來表示權值,非葉子節點表示操作過程 開始的時候線段樹的葉子節點初始化為1,而非葉子節點c k c k 1 c k 1 1 mod 也為1。當開始進行操作的時候,如果...

動態規劃用法歸納

在實際應用中,展示動態規劃的用法。01揹包問題 include includeusing namespace std int val 5000 int wei 5000 int f 13000 inline int max int a,int b int main cout 大意 一共有n個管道,每...

split 的用法歸納

python中常常用到split 方法,今天歸納一下這個方法具體用法1.input split 輸入wang a tao 會被自動分割為wang a tao 三個單元,並且每個單元都是乙個整體 s wang a tao split 此時s為list型 for i in s print i 輸出結果 ...