簡單的中位數

2022-07-08 14:09:13 字數 1174 閱讀 2112

給定乙個 n×m 的矩陣,以及 q 次詢問,每次詢問包括 4 個值分別為 a,b,c,d 代表著左上角為(a,b)右下角為(c,d)的子矩陣,求在這個子矩陣中的中位數是多少,若矩陣中的個數為偶數個,則取中間偏小的數。如矩陣中的數為 1,2,3,4,那麼答案是 2

輸入格式

一行乙個整數 tt(1< t< 100)代表 tt 組資料

第二行三個整數 n,m,q(1≤n,m≤100,1≤q≤100000)代表矩陣的行列以及詢問次數。其中對於所有資料 n×m 的總和不超過 3e5,qq 的總和不超過 1e6

接下來 n 行 m 個數 aij 代表初始矩陣中的元素(1≤aij≤500)

最後 q 行,每行 4 個整數 a,b,c,d,(1≤a≤c≤n,1≤b≤d≤m)

輸出格式

每組資料輸出 q 行每行乙個答案

輸出時每行末尾的多餘空格,不影響答案正確性

樣例輸入

1

5 5 2

5 4 3 2 1

10 11 12 13 25

9 8 7 6 14

15 16 17 18 19

24 23 22 21 20

5 1 5 5

2 1 5 5

樣例輸出

22

15

二分

ch[v][i][j],ij子矩陣中值小於等於v的個數

#includeusing namespace std;

const int inf=0x3f3f3f3f,mod=1e9+7,maxn=102;

#define lowbit(x) ((x)&(-x))

#define init(arr,val) memset(arr,val,sizeof(arr))

typedef long long ll;

int a[maxn][maxn],ch[501][maxn][maxn],n,m,q;

bool vis[501];

void get(int k)

}}int x,y,xx,yy;

int check(int ans)

int main()

}else

}printf("%d\n",r);}}

return 0;

}

中位數的中位數

參照王曉東的演算法設計 中位數的中位數,即將一串數分成n段,求其排好序了的中間那個數,再把這些所有中位數再求一次中位數。for int i 0 i r p 4 5 i 找中位數的中位數,r p 4即上面所說的n 5 int x lineselect a,p,p r p 4 5,r p 4 10 線性...

BFPRT(中位數的中位數)演算法

又稱為 中位數的中位數演算法 該演算法由 blum floyd pratt rivest tarjan 在1973年提出,最壞時間複雜度為o n 最差的空間複雜度為o logn 演算法步驟 1 將 n 個元素劃分為 n 5 個組,每組 5 個元素,若有剩餘,捨去 2 使用排序方法找到 n 5 個組中...

hive 中位數 Hive的中位數

關於求解中位數,我們知道在python中直接有中位數處理函式 mean 比如在python中求解乙個中位數,很簡單。python計算中位數 import numpy as np nums 1.1,2.2,3.3,4.4,5.5,6.6 均值np.mean nums 中位數 np.median num...