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

2021-10-03 08:13:18 字數 1283 閱讀 6571

簡單記錄一下自己的**,以後方便複習

其實有了這樣子的乙個模板,題目變式自己改改就可以,比如說加減變成乘除等等。

#pragma gcc optimize(3,"ofast","inline")

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define maxn 1000005

//#define true false

//#define false true

const

int maxn =

0x3f3f3f3f

;const

int minn =

0xc0c0c00c

;const

double pi =

acos(-

1);typedef

long

long ll;

const

int mod =

1e9+7;

using

namespace std;

ll arr[maxn]

;ll tree[maxn]

;ll add[maxn]

;void

build_tree

(ll node, ll start, ll ends)

}void

update_treepoint

(ll node, ll start, ll ends, ll idx, ll val)

else

}void

add(ll node, ll start, ll ends, ll val)

void

pushdown

(ll node, ll start, ll ends, ll mid)

void

update_section

(ll node, ll start, ll ends, ll l, ll r, ll val)

ll query_tree

(ll node, ll start, ll ends, ll l, ll r)

intmain()

else

}return0;

}

C 線段樹 區間修改 區間查詢

這次要引入乙個核心變數 lazy 懶標記 為了達到區間修改的目的 又為了減少運算量 所以就需要引入懶標記這個變數 用來滿足 即用即推 子線段要用了便向下推行 lazy 舉個例子 如果我們只用紅色這個線段 那就不用向下推 把 lazy 留在這裡 但是如果要用到橙色的部分 那就需要把 lazy 下推到橙...

FJUT 借教室 線段樹區間查詢 區間修改

解題思路 看到題目,經典的區間查詢 區間修改,我們用線段樹維護一段區間的最小值,每當有新的訂單,我們就先查詢訂單時間範圍內的最小教室數量,然後與dj作比較,如果比dj小,那麼我們可以標記為false,然後後面的操作都不用看了,因為他只要求輸出第乙個不滿足的訂單,否則就按照訂單進行區間修改,即在該訂單...

線段樹單點修改區間查詢

這是一道模板題。給定數列 a 1 a 2 a n 你需要依次進行 qq 個操作,操作有兩類 1 i x 給定 i,x,將 a i 加上 x 2 l r 給定 l,r,求 ri la i 的值 換言之,求 a l a l 1 a r 的值 input 第一行包含 2 個正整數 n,q,表示數列長度和詢...