士兵殺敵(三)

2021-08-22 08:36:05 字數 1390 閱讀 3501

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

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

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

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

只有一組測試資料

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

隨後的一行有n個整數vi(0<=vi<100000000),分別表示每個人的殺敵數。

再之後的q行,每行有兩個正正數m,n,表示南將軍詢問的是第m號士兵到第n號士兵。

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

5 2

1 2 6 9 3

1 22 4

1

7

剛開始我的**是錯誤的

#include#includeusing namespace std;

const int maxn=1000010;

int a[maxn];

int main()

//轉移方程

}int main()

rmq(n);//st演算法

while(q--) //o(1)查詢

return 0;

}

還有一種是,建堆疊樹

#include #include#include #include #define maxn 1000100  

using namespace std;

int array[maxn];

int max, min; //利用全域性變數來獲取遞迴結果

typedef struct infoinfo;

info segt[maxn * 4 + 10];

void build(int node, int begin, int end)

else

} void query(int node, int begin, int end, int l, int r)

else

} } int main()

build(1, 1, n);

int l, r;

while(m--)

} return 0;

}

士兵殺敵(三)

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

士兵殺敵(三)

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

士兵殺敵(三)

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