模板 線段樹求區間最大 最小值及下標

2021-08-10 05:03:06 字數 985 閱讀 6552

一般用來求區間最大值最小值的:

#include#include using namespace std;

const

int maxn=10010;

int a[maxn];

struct node

num[maxn<<2];

int buildmin(int

left,int

right,int cnt)

int buildmax(int

left,int

right,int cnt)

int querymin(int

left,int

right,int cnt)

int querymax(int

left,int

right,int cnt)

如果不僅要求區間最大值/最小值的位置,還要得到它的下標,那就維護的時候帶上下標和最值一起,返回型別為pair

typedef long long ll;

const

int maxn=100000+5;

ll a[maxn];

struct node

num[maxn*4];

//建樹

pair buildmin(int left,int right,int cnt)

mid=(left+right)>>1;

pair r1=buildmin(left,mid,cnt*2);

pair r2=buildmin(mid+1,right,cnt*2+1);

if(r1.secondmin=r1.second;

return r1;

}else

}//返回pair型別,first為下標,second為最小值

pair querymin(int left,int right,int cnt)

}

線段樹求區間最大值和最小值(指標)

鏈結 include include using namespace std define max a,b a b?a b define min a,b al a s r b if a 1 b 不是葉子結點線段 return s void update linetree s,int a,int b ...

線段樹(區間求和 插入 查詢最大最小值) 模板

題目 給你乙個陣列a 1 n 初始時每個元素都為零。對陣列完成一些操作 第一種可能,給你兩個數p 和x 1 p n 把陣列的第p 個元素替換為x,即a p x.第二種可能,給你兩個數l 和r 1 l r n 請給出a l a l 1 a r 這幾個數中去掉乙個最大值和乙個最小值後剩下的數的和是多少....

poj 3264 線段樹區間最大最小值

題意 給n組資料,q個詢問,每次詢問區間l,r最大值與最小值的差是多少。解析 睡前一水,卻錯了2發。詢問的時候寫錯了,並不是直接去更新maxx minn的最大值。是直接更新maxx,minn,然後最後一減就行了。include include include include include incl...