RMQ 線段樹複習

2021-08-15 20:55:37 字數 717 閱讀 6850

首先是rmq:

#include#include#includeusing namespace std;

const int maxn=50000+100;

int dmax[maxn][20];

int dmin[maxn][20];

void initmax(int n,int d)//初始化最大值查詢

//遞迴建立線段樹

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

int m=(l+r)/2;

build(lson);

build(rson);

pushup(i);//收集子節點的結果

}

//在當前區間[l, r]內查詢區間[ql, qr]間的目標值

//且能執行這個函式的前提是:[l,r]與[ql,qr]的交集非空

//其實本函式返回的結果也是 它們交集的目標值

int query(int ql,int qr,int i,int l,int r)

{ //目的區間包含當前區間

if(ql<=l && r<=qr) return sum[i];

int m=(l+r)/2;

int res=0;

if(ql<=m) res += query(ql,qr,lson);

if(m

RMQ(線段樹實現)

t t第乙個線段樹程式,還沒a過題,不過也很感動,先貼出來 下標從0開始,輸入 1 1 結束.求每一段區間之間的最大值。include include typedef struct treenodenode int mymax int a,int b node buildtree int a,int...

RMQ問題 st 線段樹

j 演算法 rmq range minimum maximum query 問題是指 對於長度為n的數列a,回答若干詢問rmq a,i,j i,j n 返回數列a中下標在 i,j 裡的最小 大 值,也就是說,rmq問題是指求區間最值的問題 主要方法及複雜度 處理複雜度和查詢複雜度 如下 1.樸素 即...

基於線段樹的RMQ

rmq range minimum maximum query 區間最值查詢,即給出長度為n的陣列a,以及m組詢問s t s t n 返回區間 s,t 中的最值。基於線段樹的方法實現的話,建樹o n 查詢o logn 相比st,適合用於n更大,m較小的情況。void built int k,int ...