NYOJ119 士兵殺敵(三) 線段樹

2021-07-17 00:04:25 字數 1245 閱讀 9025

時間限制:

2000 ms  |  記憶體限制:

65535 kb

難度:5 描述

南將軍統率著n個士兵,士兵分別編號為1~n,南將軍經常愛拿某一段編號內殺敵數最高的人與殺敵數最低的人進行比較,計算出兩個人的殺敵數差值,用這種方法一方面能鼓舞殺敵數高的人,另一方面也算是批評殺敵數低的人,起到了很好的效果。

所以,南將軍經常問軍師小工第i號士兵到第j號士兵中,殺敵數最高的人與殺敵數最低的人之間軍功差值是多少。

現在,請你寫乙個程式,幫小工回答南將軍每次的詢問吧。

注意,南將軍可能詢問很多次。

輸入

只有一組測試資料

第一行是兩個整數n,q,其中n表示士兵的總數。q表示南將軍詢問的次數。(1

輸出對於每次詢問,輸出第m號士兵到第n號士兵之間所有士兵殺敵數的最大值與最小值的差。

樣例輸入

5 2

1 2 6 9 3

1 22 4

樣例輸出

1

7

**經典改編

上傳者

張云聰//基本的線段樹 連跟新都沒有 直接建樹查詢就ok了

//寫了一下別的風格

#include#includeusing namespace std;

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

#define ll 100010

int maxx,minn;

struct node

tree[ll*4];

void pushup(int rt)

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

int m=(l+r)>>1;

build(lson);

build(rson);

pushup(rt);

}void query(int l,int r,int rt)

int m=(tree[rt].l+tree[rt].r)>>1;

if(l<=m)

query(l,r,rt<<1);

if(r>m)

query(l,r,rt<<1|1);

}int main()

{ int n,q,i;

scanf("%d%d",&n,&q);

build(1,n,1);

int a,b;

for(i=0; i

NYOJ 119 士兵殺敵(三)(線段樹)

士兵殺敵 三 時間限制 2000 ms 記憶體限制 65535 kb 難度 5 描述 南將軍統率著n個士兵,士兵分別編號為1 n,南將軍經常愛拿某一段編號內殺敵數最高的人與殺敵數最低的人進行比較,計算出兩個人的殺敵數差值,用這種方法一方面能鼓舞殺敵數高的人,另一方面也算是批評殺敵數低的人,起到了很好...

NYOJ119 士兵殺敵(三)

題目分析 這道題用的rmq演算法 range maximum minimum query 這裡做了幾點優化。1 定義dpmax和dpmin時,為什麼17寫在前面,因為記憶體中資料是按行連續的存的,所以初始化dpmax 0 和dpmin 0 相關資料時,可以直接用memcpy。2 所有的求2的方冪的操...

NYOJ 119士兵殺敵(三)

時間限制 2000 ms 記憶體限制 65535 kb 難度 5 描述 南將軍統率著n個士兵,士兵分別編號為1 n,南將軍經常愛拿某一段編號內殺敵數最高的人與殺敵數最低的人進行比較,計算出兩個人的殺敵數差值,用這種方法一方面能鼓舞殺敵數高的人,另一方面也算是批評殺敵數低的人,起到了很好的效果。所以,...