日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NYOJ 119 士兵杀敌(三)

發布時間:2025/3/16 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NYOJ 119 士兵杀敌(三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

士兵殺敵(三)

時間限制:2000?ms ?|? 內存限制:65535?KB 難度:5 描述

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

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

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

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

輸入
只有一組測試數據
第一行是兩個整數N,Q,其中N表示士兵的總數。Q表示南將軍詢問的次數。(1<N<=100000,1<Q<=1000000)
隨后的一行有N個整數Vi(0<=Vi<100000000),分別表示每個人的殺敵數。
再之后的Q行,每行有兩個正正數m,n,表示南將軍詢問的是第m號士兵到第n號士兵。
輸出
對于每次詢問,輸出第m號士兵到第n號士兵之間所有士兵殺敵數的最大值與最小值的差。
樣例輸入
5 2 1 2 6 9 3 1 2 2 4
樣例輸出
1 7
線段樹!
AC碼:
#include<stdio.h> #define M 300005 int max[M],min[M]; int a,b,maxs,mins; void CreateTree(int L,int R,int root) {if(L==R){scanf("%d",&max[root]);min[root]=max[root];return;}int mid=(L+R)/2;CreateTree(L,mid,root*2);CreateTree(mid+1,R,root*2+1);max[root]=max[root*2]>max[root*2+1]?max[root*2]:max[root*2+1];min[root]=min[root*2]<min[root*2+1]?min[root*2]:min[root*2+1]; } void Query(int L,int R,int root) {if(a>R||b<L)return;if(a<=L&&b>=R){if(maxs<max[root])maxs=max[root];if(mins>min[root])mins=min[root];return;}int mid=(L+R)/2;Query(L,mid,root*2);Query(mid+1,R,root*2+1); } int main() {int N,Q;scanf("%d%d",&N,&Q);CreateTree(1,N,1);while(Q--){scanf("%d%d",&a,&b);maxs=0;mins=100000000;Query(1,N,1);printf("%d\n",maxs-mins);}return 0; }

總結

以上是生活随笔為你收集整理的NYOJ 119 士兵杀敌(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。