一般用來求區間最大值最小值的:
#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...