範圍統計問題

2021-09-09 04:40:31 字數 1123 閱讀 6198

範圍統計問題(參考劉汝佳《演算法競賽入門經典》p146)

問題描述:

給出 n 個整數和 m 次詢問,對於每次詢問 (a, b), 輸出閉區間 [a, b] 內的整數的個數

分析:預處理:

把資料存在陣列裡並從小到大排序

問題一:

大於等於 a 的第乙個元素的下標 l 是什麼? 它等於 a 的lower_bound 值。

如果所有元素都小於a,則 l = n,相當於把不存在的元素看做無窮大。

問題二:

小於等於b 的最後乙個元素的 "下乙個下標" r 是什麼? 它等於 b 的upper_bound值,

如果所有的元素都大於 b ,則相當於 r = 0,相當於想象a[0] 前邊還有乙個a[-1]等於

負無窮大,則這個a[-1]的"下乙個位置"就是 0 。

這樣問題的答案就是區間[l, r] 的長度,即 r-l。 順便說一句,stl中已經包含了lower_bound

和upper_bound,可以直接使用。

**實現:

1 #include 2 #include //

stl演算法標頭檔案,包含sort, lower_bound 和 upper_bound等34

using

namespace

std;56

int v[1000];7

8int

main()

921 }

兩個函式也可以自己定義如下:

二分查詢求下界的函式:

當 v 存在時返回它出現的第乙個位置。如果不存在,返回這樣乙個下標i:

在此處插入 v後數列仍然有序。

1

int low_bound(int *a, int x, int y, intv)2

12return

x;13 }

二分查詢求上界的函式:

當 v 存在時返回它最後出現的下乙個位置。如果不存在,返回這樣乙個下標i :在此處插入 v後數列仍然有序:

1

int upper_bound(int *a, int x, int y, intv)2

12return

x;13 }

oracle範圍統計資料

需求 充值總筆數 筆數 單筆0 200元 筆數 單筆201 300元 筆數 單筆301 500元 筆數 單筆501元及以上 參照範例 需求 統計wait order表中的工單總數 未處理工單總數 已完成工單總數 未完成工單總數。表結構 為了舉例子方便,wait order表只有兩個字段,分別是id ...

arcgis根據需求範圍統計柵格資料

在進行柵格統計計算時,我們往往需要根據需求對統計範圍進行設定,比如統計某一點北風方向的地形起伏度,這時可以通過arcgis空間分析模組 領域統計 焦點統計 不規則形狀的統計功能,通過設定柵格點需要統計的範圍規則檔案即可。不規則形狀 用於在待處理像元周圍指定形狀不規則的鄰域。通過不規則形狀核檔案可指定...

MYSQL 統計本週 本月的時間範圍設定

select subdate curdate if date format curdate w 0,7,date format curdate w 1 獲取當前日期在本週的周一 select subdate curdate if date format curdate w 0,7,date form...