題目出處
描述南將軍統率著n個士兵,士兵分別編號為1~n,南將軍經常愛拿某一段編號內殺敵數最高的人與殺敵數最低的人進行比較,計算出兩個人的殺敵數差值,用這種方法一方面能鼓舞殺敵數高的人,另一方面也算是批評殺敵數低的人,起到了很好的效果。
所以,南將軍經常問軍師小工第i號士兵到第j號士兵中,殺敵數最高的人與殺敵數最低的人之間軍功差值是多少。
現在,請你寫乙個程式,幫小工回答南將軍每次的詢問吧。
注意,南將軍可能詢問很多次。
輸入
只有一組測試資料
第一行是兩個整數n,q,其中n表示士兵的總數。q表示南將軍詢問的次數。(1
輸出對於每次詢問,輸出第m號士兵到第n號士兵之間所有士兵殺敵數的最大值與最小值的差。
樣例輸入
5 21 2 6 9 3
1 22 4
樣例輸出
17
#include#include#define maxx 100000
using namespace std;
#define l o<<1
#define r (o<<1)|1
int tmax,tmin;//記錄最大最小值,減少查詢次數
#define inf 0x3f3f3f3f
struct node
tree[maxx<<2];
void pushup(int o)
void build(int o, int l, int r)
int mid = ( l+r ) >> 1;
build(l,l,mid);
build(r,mid+1,r);
pushup(o);
}void querymax_min(int o,int l,int r,int x,int y)
int mid=(l+r)>>1;
if(y<=mid)
querymax_min(r,l,mid,x,y);
else if(x>mid)
querymax_min(l,mid+1,r,x,y);
else
} int main()
return 0;
}
上面這個min 和max是寫在一起的,但是要是用下面乙個,打死也過不了啊,分開查詢會超時
#include#include#define maxx 100000
using namespace std;
#define l o<<1
#define r (o<<1)|1
struct node
tree[maxx<<2];
void pushup(int o)
void build(int o, int l, int r)
int mid = ( l+r ) >> 1;
build(l,l,mid);
build(r,mid+1,r);
pushup(o);
}int querymax(int o,int l,int r,int x,int y) //查詢x到y的最大值
int mid = (l + r) / 2;
if (mid >= y)
return querymax(l,l,mid,x,y);
else if (x > mid)
return querymax(r,mid+1,r,x,y);
else
return max(querymax(l,l,mid,x,mid) , querymax(r,mid+1,r,mid+1,y)); //更新當前節點
}int querymin(int o,int l,int r,int x,int y) //查詢x到y的最小值
int mid = (l + r) / 2;
if (mid >= y)
return querymin(l,l,mid,x,y);
else if (x > mid)
return querymin(r,mid+1,r,x,y);
else
return min(querymin(l,l,mid,x,mid) , querymin(r,mid+1,r,mid+1,y)); //更新當前節點
}int main()
return 0;
}
士兵殺敵(三)
描述 南將軍統率著n個士兵,士兵分別編號為1 n,南將軍經常愛拿某一段編號內殺敵數最高的人與殺敵數最低的人進行比較,計算出兩個人的殺敵數差值,用這種方法一方面能鼓舞殺敵數高的人,另一方面也算是批評殺敵數低的人,起到了很好的效果。所以,南將軍經常問軍師小工第i號士兵到第j號士兵中,殺敵數最高的人與殺敵...
士兵殺敵(三)
時間限制 2000 ms 記憶體限制 65535 kb 描述 南將軍統率著n個士兵,士兵分別編號為1 n,南將軍經常愛拿某一段編號內殺敵數最高的人與殺敵數最低的人進行比較,計算出兩個人的殺敵數差值,用這種方法一方面能鼓舞殺敵數高的人,另一方面也算是批評殺敵數低的人,起到了很好的效果。所以,南將軍經常...
士兵殺敵(三)
時間限制 2000 ms 記憶體限制 65535 kb 難度 5 描述 南將軍統率著n個士兵,士兵分別編號為1 n,南將軍經常愛拿某一段編號內殺敵數最高的人與殺敵數最低的人進行比較,計算出兩個人的殺敵數差值,用這種方法一方面能鼓舞殺敵數高的人,另一方面也算是批評殺敵數低的人,起到了很好的效果。所以,...