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

2021-07-10 19:29:14 字數 1195 閱讀 2707

士兵殺敵(三)

時間限制:2000 ms | 記憶體限制:65535 kb

難度:5

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

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

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

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

輸入 只有一組測試資料

第一行是兩個整數n,q,其中n表示士兵的總數。q表示南將軍詢問的次數。(1由於需要求出最大和最小值,所以查詢函式要定義成結構體,便於一次返回最大值和最小值

**

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

//線段樹基本操作

//建立兩個線段樹

const

int maxn=100005;

int n;//士兵總數

int q;//查詢次數

struct node

tree[maxn*4];

void build(int root,int star,int end)

int mid=(star+end)>>1;

build(root<<1,star,mid);

build(root<<1|1,mid+1,end);

tree[root].max_num=tree[root<<1].max_num>tree[root<<1|1].max_num?tree[root<<1].max_num:tree[root<<1|1].max_num;

tree[root].min_num=tree[root<<1].min_num1|1].min_num?tree[root<<1].min_num:tree[root<<1|1].min_num;

}node find(int root,int star,int end)

}int main()

return

0;}

NYOJ119 士兵殺敵(三) 線段樹

時間限制 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,南將軍經常愛拿某一段編號內殺敵數最高的人與殺敵數最低的人進行比較,計算出兩個人的殺敵數差值,用這種方法一方面能鼓舞殺敵數高的人,另一方面也算是批評殺敵數低的人,起到了很好的效果。所以,...