題目大意:
給定N個數,還有Q個詢問,求每個詢問中給定的區間[a,b]中最大值和最小值之差。
思路:
依舊是線段樹水題~
#include#include #include using namespace std; const int MAXN=50000+10; const int MAXM=MAXN<<2; const int INF=0x3fffffff; int maxv[MAXM],minv[MAXM],a[MAXN]; void build(int k,int L,int R) { if(L==R) { maxv[k]=a[L]; minv[k]=a[L]; } else { int m=(L+R)>>1; build(k<<1,L,m); build((k<<1)+1,m+1,R); maxv[k]=max(maxv[k<<1],maxv[(k<<1)+1]); minv[k]=min(minv[k<<1],minv[(k<<1)+1]); } } int query_max(int k,int L,int R,int a,int b) { int ans=-INF; if(a<=L && R<=b) return maxv[k]; else { int m=(L+R)>>1; if(a<=m) ans=max(ans,query_max(k<<1,L,m,a,b)); if(m>1; if(a<=m) ans=min(ans,query_min(k<<1,L,m,a,b)); if(m